Module: Redis::Objects
- Defined in:
- lib/redis/objects.rb,
lib/redis/objects/sets.rb,
lib/redis/objects/lists.rb,
lib/redis/objects/locks.rb,
lib/redis/objects/hashes.rb,
lib/redis/objects/values.rb,
lib/redis/objects/version.rb,
lib/redis/objects/counters.rb,
lib/redis/objects/sorted_sets.rb,
lib/redis/objects/connection_pool_proxy.rb
Overview
Redis::Objects enables high-performance atomic operations in your app by leveraging the atomic features of the Redis server. To use Redis::Objects, first include it in any class you want. (This example uses an ActiveRecord subclass, but that is not required.) Then, use counter, lock, set, etc to define your primitives:
class Game < ActiveRecord::Base
include Redis::Objects
counter :joined_players
counter :active_players, :key => 'game:#{id}:act_plyr'
lock :archive_game
set :player_ids
end
The, you can use these counters both for bookkeeping and as atomic actions:
@game = Game.find(id)
@game_user = @game.joined_players.increment do |val|
break if val > @game.max_players
gu = @game.game_users.create!(:user_id => @user.id)
@game.active_players.increment
gu
end
if @game_user.nil?
else
end
Defined Under Namespace
Modules: ClassMethods, Counters, Hashes, InstanceMethods, Lists, Locks, Sets, SortedSets, Values
Classes: ConnectionPoolProxy, MissingID, NilObjectId, NotConnected, UndefinedCounter, UndefinedLock
Constant Summary
collapse
- VERSION =
"2.0.0"
Class Attribute Summary collapse
Class Method Summary
collapse
Class Attribute Details
.prefix_style ⇒ Object
73
74
75
76
|
# File 'lib/redis/objects.rb', line 73
def prefix_style
@prefix_style ||= :legacy
end
|
Class Method Details
.included(klass) ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/redis/objects.rb', line 82
def included(klass)
klass.instance_variable_set(:@redis, nil)
klass.instance_variable_set(:@redis_objects, {})
klass.send :include, InstanceMethods
klass.extend ClassMethods
klass.send :include, Redis::Objects::Counters
klass.send :include, Redis::Objects::Lists
klass.send :include, Redis::Objects::Locks
klass.send :include, Redis::Objects::Sets
klass.send :include, Redis::Objects::SortedSets
klass.send :include, Redis::Objects::Values
klass.send :include, Redis::Objects::Hashes
end
|
.redis ⇒ Object
64
65
66
67
|
# File 'lib/redis/objects.rb', line 64
def redis
@redis || $redis ||
raise(NotConnected, "Redis::Objects.redis not set to a Redis.new connection")
end
|
.redis_legacy_naming? ⇒ Boolean
78
79
80
|
# File 'lib/redis/objects.rb', line 78
def redis_legacy_naming?
prefix_style == :legacy
end
|