redis-model

Minimal model support for redis-rb. Directly maps ruby properties to model_name:id:field_name keys in redis. Scalar, list and set properties are supported.

Values can be marshaled to/from Integer, Float, DateTime, JSON. See Redis::Model::Marshal for more info.

Define

require 'redis/model'

class User < Redis::Model
  value :name,      :string
  value :created,   :datetime
  value :profile,   :json

  list  :posts,     :json

  set   :followers, :int
end

Write

u = User.with_key(1)
u.name = 'Joe'                      # set user:1:name Joe
u.created = DateTime.now            # set user:1:created 2009-10-05T12:09:56+0400
u.profile = {                       # set user:1:profile {"sex":"M","about":"Lorem","age":23}
  :age => 23,                       
  :sex => 'M',                      
  :about => 'Lorem'                 
}                                   
u.posts << {                        # rpush user:1:posts {"title":"Hello world!","text":"lorem"}
    :title => "Hello world!",
    :text  => "lorem"
}           
u.followers << 2                    # sadd user:1:followers 2

Read

u = User.with_key(1)
p u.name                            # get user:1:name
p u.created.strftime('%m/%d/%Y')    # get user:1:created
p u.posts[0,20]                     # lrange user:1:posts 0 20
p u.posts[0]                        # lindex user:1:posts 0
p u.followers.has_key?(2)           # sismember user:1:followers 2