module Redis::Objects
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? # game is full - error screen else # success end
Constants
- VERSION
Public Class Methods
included(klass)
click to toggle source
# File lib/redis/objects.rb, line 69 def included(klass) # Core (this file) klass.instance_variable_set(:@redis, nil) klass.instance_variable_set(:@redis_objects, {}) klass.send :include, InstanceMethods klass.extend ClassMethods # Pull in each object type 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()
click to toggle source
# File lib/redis/objects.rb, line 64 def redis @redis || $redis || Redis.current || raise(NotConnected, "Redis::Objects.redis not set to a Redis.new connection") end
redis=(conn)
click to toggle source
# File lib/redis/objects.rb, line 61 def redis=(conn) @redis = Objects::ConnectionPoolProxy.proxy_if_needed(conn) end