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/values.rb,
lib/redis/objects/counters.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 and lock to define your primitives:

class Game < ActiveRecord::Base
include Redis::Objects

counter :joined_players
counter :active_players
set :player_ids
lock :archive_game
end

The, you can use these counters both for bookeeping 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

Defined Under Namespace

Modules: ClassMethods, Counters, InstanceMethods, Lists, Locks, Sets, Values Classes: NotConnected, UndefinedCounter, UndefinedLock

Class Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/redis/objects.rb', line 55

def included(klass)
  # Core (this file)
  klass.instance_variable_set('@redis', @redis)
  klass.send :include, InstanceMethods
  klass.extend ClassMethods
  
  # Adapted from Redis::Model for marshaling complex data
  require 'redis/data_types'
  klass.send :include, Redis::DataTypes
  
  # Pull in each object type
  klass.send :include, Redis::Objects::Counters
  klass.send :include, Redis::Objects::Values
  klass.send :include, Redis::Objects::Lists
  klass.send :include, Redis::Objects::Sets
  klass.send :include, Redis::Objects::Locks
end

.redisObject



51
52
53
# File 'lib/redis/objects.rb', line 51

def redis
  @redis ||= $redis || raise(NotConnected, "Redis::Objects.redis not set to a Redis.new connection")
end

.redis=(conn) ⇒ Object



50
# File 'lib/redis/objects.rb', line 50

def redis=(conn) @redis = conn end