1 Redis rb
ifesdjeen edited this page 2010-10-19 08:20:49 -07:00

Doc taken from http://github.com/ezmobius/redis-rb/

Getting started

You can connect to Redis by instantiating the Redis class:

require "redis"

redis = Redis.new

This assumes Redis was started with default values listening on localhost, port 6379. If you need to connect to a remote server or a different port, try:

redis = Redis.new(:host => "10.0.1.1", :port => 6380)

Once connected, you can start running commands against Redis:

>> redis.set "foo", "bar"
=> "OK"

>> redis.get "foo"
=> "bar"

>> redis.sadd "users", "albert"
=> true

>> redis.sadd "users", "bernard"
=> true

>> redis.sadd "users", "charles"
=> true

How many users?

>> redis.scard "users"
=> 3

Is albert a user?

>> redis.sismember "users", "albert"
=> true

Is isabel a user?

>> redis.sismember "users", "isabel"
=> false

Handle groups:

>> redis.sadd "admins", "albert"
=> true

>> redis.sadd "admins", "isabel"
=> true

Users who are also admins:

>> redis.sinter "users", "admins"
=> ["albert"]

Users who are not admins:

>> redis.sdiff "users", "admins"
=> ["bernard", "charles"]

Admins who are not users:

>> redis.sdiff "admins", "users"
=> ["isabel"]

All users and admins:

>> redis.sunion "admins", "users"
=> ["albert", "bernard", "charles", "isabel"]

Storing objects

Redis only stores strings as values. If you want to store an object inside a key, you can use a serialization/deseralization mechanism like JSON:

>> redis.set "foo", [1, 2, 3].to_json
=> OK

>> JSON.parse(redis.get("foo"))
=> [1, 2, 3]

Executing multiple commands atomically

You can use MULTI/EXEC to run arbitrary commands in an atomic fashion:

redis.multi do
  redis.set "foo", "bar"
  redis.incr "baz"
end