Class: Redis
- Inherits:
-
Object
- Object
- Redis
- Includes:
- MonitorMixin
- Defined in:
- lib/redis.rb,
lib/redis/client.rb,
lib/redis/errors.rb,
lib/redis/version.rb,
lib/redis/pipeline.rb,
lib/redis/hash_ring.rb,
lib/redis/subscribe.rb,
lib/redis/distributed.rb
Defined Under Namespace
Classes: BaseConnectionError, BaseError, BasicObject, CannotConnectError, Client, CommandError, ConnectionError, Distributed, Future, FutureNotReady, HashRing, InheritedError, Pipeline, ProtocolError, SubscribedClient, Subscription, TimeoutError
Constant Summary collapse
- VERSION =
"3.2.2"
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
Class Method Summary collapse
-
.connect(options = {}) ⇒ Object
deprecated
Deprecated.
The preferred way to create a new client object is using
#new
. This method does not actually establish a connection to Redis, in contrary to what you might expect. - .current ⇒ Object
- .current=(redis) ⇒ Object
- .deprecate(message, trace = caller[0]) ⇒ Object
Instance Method Summary collapse
- #_bpop(cmd, args) ⇒ Object
- #_eval(cmd, args) ⇒ Object
- #_scan(command, cursor, args, options = {}, &block) ⇒ Object
-
#append(key, value) ⇒ Fixnum
Append a value to a key.
-
#auth(password) ⇒ String
Authenticate to the server.
-
#bgrewriteaof ⇒ String
Asynchronously rewrite the append-only file.
-
#bgsave ⇒ String
Asynchronously save the dataset to disk.
-
#bitcount(key, start = 0, stop = -1)) ⇒ Fixnum
Count the number of set bits in a range of the string value stored at key.
-
#bitop(operation, destkey, *keys) ⇒ Fixnum
Perform a bitwise operation between strings and store the resulting string in a key.
-
#bitpos(key, bit, start = nil, stop = nil) ⇒ Fixnum
Return the position of the first bit set to 1 or 0 in a string.
-
#blpop(*args) ⇒ nil, [String, String]
Remove and get the first element in a list, or block until one is available.
-
#brpop(*args) ⇒ nil, [String, String]
Remove and get the last element in a list, or block until one is available.
-
#brpoplpush(source, destination, options = {}) ⇒ nil, String
Pop a value from a list, push it to another list and return it; or block until one is available.
-
#config(action, *args) ⇒ String, Hash
Get or set server configuration parameters.
-
#connected? ⇒ Boolean
Test whether or not the client is connected.
-
#dbsize ⇒ Fixnum
Return the number of keys in the selected database.
- #debug(*args) ⇒ Object
-
#decr(key) ⇒ Fixnum
Decrement the integer value of a key by one.
-
#decrby(key, decrement) ⇒ Fixnum
Decrement the integer value of a key by the given number.
-
#del(*keys) ⇒ Fixnum
Delete one or more keys.
-
#discard ⇒ String
Discard all commands issued after MULTI.
-
#disconnect! ⇒ Object
Disconnect the client as quickly and silently as possible.
-
#dump(key) ⇒ String
Return a serialized version of the value stored at a key.
- #dup ⇒ Object
-
#echo(value) ⇒ String
Echo the given string.
-
#eval(*args) ⇒ Object
Evaluate Lua script.
-
#evalsha(*args) ⇒ Object
Evaluate Lua script by its SHA.
-
#exec ⇒ nil, Array<...>
Execute all commands issued after MULTI.
-
#exists(key) ⇒ Boolean
Determine if a key exists.
-
#expire(key, seconds) ⇒ Boolean
Set a key's time to live in seconds.
-
#expireat(key, unix_time) ⇒ Boolean
Set the expiration for a key as a UNIX timestamp.
-
#flushall ⇒ String
Remove all keys from all databases.
-
#flushdb ⇒ String
Remove all keys from the current database.
-
#get(key) ⇒ String
(also: #[])
Get the value of a key.
-
#getbit(key, offset) ⇒ Fixnum
Returns the bit value at offset in the string value stored at key.
-
#getrange(key, start, stop) ⇒ Fixnum
Get a substring of the string stored at a key.
-
#getset(key, value) ⇒ String
Set the string value of a key and return its old value.
-
#hdel(key, field) ⇒ Fixnum
Delete one or more hash fields.
-
#hexists(key, field) ⇒ Boolean
Determine if a hash field exists.
-
#hget(key, field) ⇒ String
Get the value of a hash field.
-
#hgetall(key) ⇒ Hash<String, String>
Get all the fields and values in a hash.
-
#hincrby(key, field, increment) ⇒ Fixnum
Increment the integer value of a hash field by the given integer number.
-
#hincrbyfloat(key, field, increment) ⇒ Float
Increment the numeric value of a hash field by the given float number.
-
#hkeys(key) ⇒ Array<String>
Get all the fields in a hash.
-
#hlen(key) ⇒ Fixnum
Get the number of fields in a hash.
-
#hmget(key, *fields, &blk) ⇒ Array<String>
Get the values of all the given hash fields.
-
#hmset(key, *attrs) ⇒ String
Set one or more hash values.
-
#hscan(key, cursor, options = {}) ⇒ String, Array<[String, String]>
Scan a hash.
-
#hscan_each(key, options = {}, &block) ⇒ Enumerator
Scan a hash.
-
#hset(key, field, value) ⇒ Boolean
Set the string value of a hash field.
-
#hsetnx(key, field, value) ⇒ Boolean
Set the value of a hash field, only if the field does not exist.
-
#hvals(key) ⇒ Array<String>
Get all the values in a hash.
- #id ⇒ Object
-
#incr(key) ⇒ Fixnum
Increment the integer value of a key by one.
-
#incrby(key, increment) ⇒ Fixnum
Increment the integer value of a key by the given integer number.
-
#incrbyfloat(key, increment) ⇒ Float
Increment the numeric value of a key by the given float number.
-
#info(cmd = nil) ⇒ Hash<String, String>
Get information and statistics about the server.
-
#initialize(options = {}) ⇒ Redis
constructor
Create a new client instance.
- #inspect ⇒ Object
-
#keys(pattern = "*") ⇒ Array<String>
Find all keys matching the given pattern.
-
#lastsave ⇒ Fixnum
Get the UNIX time stamp of the last successful save to disk.
-
#lindex(key, index) ⇒ String
Get an element from a list by its index.
-
#linsert(key, where, pivot, value) ⇒ Fixnum
Insert an element before or after another element in a list.
-
#llen(key) ⇒ Fixnum
Get the length of a list.
-
#lpop(key) ⇒ String
Remove and get the first element in a list.
-
#lpush(key, value) ⇒ Fixnum
Prepend one or more values to a list, creating the list if it doesn't exist.
-
#lpushx(key, value) ⇒ Fixnum
Prepend a value to a list, only if the list exists.
-
#lrange(key, start, stop) ⇒ Array<String>
Get a range of elements from a list.
-
#lrem(key, count, value) ⇒ Fixnum
Remove elements from a list.
-
#lset(key, index, value) ⇒ String
Set the value of an element in a list by its index.
-
#ltrim(key, start, stop) ⇒ String
Trim a list to the specified range.
-
#mapped_hmget(key, *fields) ⇒ Hash
Get the values of all the given hash fields.
-
#mapped_hmset(key, hash) ⇒ String
Set one or more hash values.
-
#mapped_mget(*keys) ⇒ Hash
Get the values of all the given keys.
-
#mapped_mset(hash) ⇒ String
Set one or more values.
-
#mapped_msetnx(hash) ⇒ Boolean
Set one or more values, only if none of the keys exist.
- #method_missing(command, *args) ⇒ Object
-
#mget(*keys, &blk) ⇒ Array<String>
Get the values of all the given keys.
-
#migrate(key, options) ⇒ String
Transfer a key from the connected instance to another instance.
-
#monitor {|line| ... } ⇒ Object
Listen for all requests received by the server in real time.
-
#move(key, db) ⇒ Boolean
Move a key to another database.
-
#mset(*args) ⇒ String
Set one or more values.
-
#msetnx(*args) ⇒ Boolean
Set one or more values, only if none of the keys exist.
-
#multi {|multi| ... } ⇒ String, Array<...>
Mark the start of a transaction block.
- #object(*args) ⇒ Object
-
#persist(key) ⇒ Boolean
Remove the expiration from a key.
-
#pexpire(key, milliseconds) ⇒ Boolean
Set a key's time to live in milliseconds.
-
#pexpireat(key, ms_unix_time) ⇒ Boolean
Set the expiration for a key as number of milliseconds from UNIX Epoch.
-
#pfadd(key, member) ⇒ Boolean
Add one or more members to a HyperLogLog structure.
-
#pfcount(*keys) ⇒ Fixnum
Get the approximate cardinality of members added to HyperLogLog structure.
-
#pfmerge(dest_key, *source_key) ⇒ Boolean
Merge multiple HyperLogLog values into an unique value that will approximate the cardinality of the union of the observed Sets of the source HyperLogLog structures.
-
#ping ⇒ String
Ping the server.
- #pipelined ⇒ Object
-
#psetex(key, ttl, value) ⇒ String
Set the time to live in milliseconds of a key.
-
#psubscribe(*channels, &block) ⇒ Object
Listen for messages published to channels matching the given patterns.
-
#pttl(key) ⇒ Fixnum
Get the time to live (in milliseconds) for a key.
-
#publish(channel, message) ⇒ Object
Post a message to a channel.
-
#pubsub(subcommand, *args) ⇒ Object
Inspect the state of the Pub/Sub subsystem.
-
#punsubscribe(*channels) ⇒ Object
Stop listening for messages posted to channels matching the given patterns.
-
#quit ⇒ String
Close the connection.
-
#randomkey ⇒ String
Return a random key from the keyspace.
-
#rename(old_name, new_name) ⇒ String
Rename a key.
-
#renamenx(old_name, new_name) ⇒ Boolean
Rename a key, only if the new key does not exist.
-
#restore(key, ttl, serialized_value) ⇒ String
Create a key using the serialized value, previously obtained using DUMP.
-
#rpop(key) ⇒ String
Remove and get the last element in a list.
-
#rpoplpush(source, destination) ⇒ nil, String
Remove the last element in a list, append it to another list and return it.
-
#rpush(key, value) ⇒ Fixnum
Append one or more values to a list, creating the list if it doesn't exist.
-
#rpushx(key, value) ⇒ Fixnum
Append a value to a list, only if the list exists.
-
#sadd(key, member) ⇒ Boolean, Fixnum
Add one or more members to a set.
-
#save ⇒ String
Synchronously save the dataset to disk.
-
#scan(cursor, options = {}) ⇒ String+
Scan the keyspace.
-
#scan_each(options = {}, &block) ⇒ Enumerator
Scan the keyspace.
-
#scard(key) ⇒ Fixnum
Get the number of members in a set.
-
#script(subcommand, *args) ⇒ String, ...
Control remote script registry.
-
#sdiff(*keys) ⇒ Array<String>
Subtract multiple sets.
-
#sdiffstore(destination, *keys) ⇒ Fixnum
Subtract multiple sets and store the resulting set in a key.
-
#select(db) ⇒ String
Change the selected database for the current connection.
-
#sentinel(subcommand, *args) ⇒ Array<String>, ...
Interact with the sentinel command (masters, master, slaves, failover).
-
#set(key, value, options = {}) ⇒ String, Boolean
(also: #[]=)
Set the string value of a key.
-
#setbit(key, offset, value) ⇒ Fixnum
Sets or clears the bit at offset in the string value stored at key.
-
#setex(key, ttl, value) ⇒ String
Set the time to live in seconds of a key.
-
#setnx(key, value) ⇒ Boolean
Set the value of a key, only if the key does not exist.
-
#setrange(key, offset, value) ⇒ Fixnum
Overwrite part of a string at key starting at the specified offset.
-
#shutdown ⇒ Object
Synchronously save the dataset to disk and then shut down the server.
-
#sinter(*keys) ⇒ Array<String>
Intersect multiple sets.
-
#sinterstore(destination, *keys) ⇒ Fixnum
Intersect multiple sets and store the resulting set in a key.
-
#sismember(key, member) ⇒ Boolean
Determine if a given value is a member of a set.
-
#slaveof(host, port) ⇒ Object
Make the server a slave of another instance, or promote it as master.
-
#slowlog(subcommand, length = nil) ⇒ Array<String>, ...
Interact with the slowlog (get, len, reset).
-
#smembers(key) ⇒ Array<String>
Get all the members in a set.
-
#smove(source, destination, member) ⇒ Boolean
Move a member from one set to another.
-
#sort(key, options = {}) ⇒ Array<String>, ...
Sort the elements in a list, set or sorted set.
-
#spop(key) ⇒ String
Remove and return a random member from a set.
-
#srandmember(key, count = nil) ⇒ String
Get one or more random members from a set.
-
#srem(key, member) ⇒ Boolean, Fixnum
Remove one or more members from a set.
-
#sscan(key, cursor, options = {}) ⇒ String+
Scan a set.
-
#sscan_each(key, options = {}, &block) ⇒ Enumerator
Scan a set.
-
#strlen(key) ⇒ Fixnum
Get the length of the value stored in a key.
-
#subscribe(*channels, &block) ⇒ Object
Listen for messages published to the given channels.
- #subscribed? ⇒ Boolean
-
#sunion(*keys) ⇒ Array<String>
Add multiple sets.
-
#sunionstore(destination, *keys) ⇒ Fixnum
Add multiple sets and store the resulting set in a key.
-
#sync ⇒ Object
Internal command used for replication.
- #synchronize ⇒ Object
-
#time ⇒ Array<Fixnum>
Return the server time.
-
#ttl(key) ⇒ Fixnum
Get the time to live (in seconds) for a key.
-
#type(key) ⇒ String
Determine the type stored at key.
-
#unsubscribe(*channels) ⇒ Object
Stop listening for messages posted to the given channels.
-
#unwatch ⇒ String
Forget about all watched keys.
-
#watch(*keys) ⇒ Object, String
Watch the given keys to determine execution of the MULTI/EXEC block.
-
#with_reconnect(val = true, &blk) ⇒ Object
Run code with the client reconnecting.
-
#without_reconnect(&blk) ⇒ Object
Run code without the client reconnecting.
-
#zadd(key, *args) ⇒ Boolean, ...
Add one or more members to a sorted set, or update the score for members that already exist.
-
#zcard(key) ⇒ Fixnum
Get the number of members in a sorted set.
-
#zcount(key, min, max) ⇒ Fixnum
Count the members in a sorted set with scores within the given values.
-
#zincrby(key, increment, member) ⇒ Float
Increment the score of a member in a sorted set.
-
#zinterstore(destination, keys, options = {}) ⇒ Fixnum
Intersect multiple sorted sets and store the resulting sorted set in a new key.
-
#zrange(key, start, stop, options = {}) ⇒ Array<String>, Array<[String, Float]>
Return a range of members in a sorted set, by index.
-
#zrangebylex(key, min, max, options = {}) ⇒ Array<String>, Array<[String, Float]>
Return a range of members with the same score in a sorted set, by lexicographical ordering.
-
#zrangebyscore(key, min, max, options = {}) ⇒ Array<String>, Array<[String, Float]>
Return a range of members in a sorted set, by score.
-
#zrank(key, member) ⇒ Fixnum
Determine the index of a member in a sorted set.
-
#zrem(key, member) ⇒ Boolean, Fixnum
Remove one or more members from a sorted set.
-
#zremrangebyrank(key, start, stop) ⇒ Fixnum
Remove all members in a sorted set within the given indexes.
-
#zremrangebyscore(key, min, max) ⇒ Fixnum
Remove all members in a sorted set within the given scores.
-
#zrevrange(key, start, stop, options = {}) ⇒ Object
Return a range of members in a sorted set, by index, with scores ordered from high to low.
-
#zrevrangebylex(key, max, min, options = {}) ⇒ Object
Return a range of members with the same score in a sorted set, by reversed lexicographical ordering.
-
#zrevrangebyscore(key, max, min, options = {}) ⇒ Object
Return a range of members in a sorted set, by score, with scores ordered from high to low.
-
#zrevrank(key, member) ⇒ Fixnum
Determine the index of a member in a sorted set, with scores ordered from high to low.
-
#zscan(key, cursor, options = {}) ⇒ String, Array<[String, Float]>
Scan a sorted set.
-
#zscan_each(key, options = {}, &block) ⇒ Enumerator
Scan a sorted set.
-
#zscore(key, member) ⇒ Float
Get the score associated with the given member in a sorted set.
-
#zunionstore(destination, keys, options = {}) ⇒ Fixnum
Add multiple sorted sets and store the resulting sorted set in a new key.
Constructor Details
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(command, *args) ⇒ Object
2644 2645 2646 2647 2648 |
# File 'lib/redis.rb', line 2644 def method_missing(command, *args) synchronize do |client| client.call([command] + args) end end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
10 11 12 |
# File 'lib/redis.rb', line 10 def client @client end |
Class Method Details
.connect(options = {}) ⇒ Object
The preferred way to create a new client object is using #new
.
This method does not actually establish a connection to Redis,
in contrary to what you might expect.
15 16 17 |
# File 'lib/redis.rb', line 15 def self.connect( = {}) new() end |
.current ⇒ Object
19 20 21 |
# File 'lib/redis.rb', line 19 def self.current @current ||= Redis.new end |
.current=(redis) ⇒ Object
23 24 25 |
# File 'lib/redis.rb', line 23 def self.current=(redis) @current = redis end |
.deprecate(message, trace = caller[0]) ⇒ Object
6 7 8 |
# File 'lib/redis.rb', line 6 def self.deprecate(, trace = caller[0]) $stderr.puts "\n#{} (in #{trace})" end |
Instance Method Details
#_bpop(cmd, args) ⇒ Object
1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 |
# File 'lib/redis.rb', line 1076 def _bpop(cmd, args) = {} case args.last when Hash = args.pop when Integer # Issue deprecation notice in obnoxious mode... [:timeout] = args.pop end if args.size > 1 # Issue deprecation notice in obnoxious mode... end keys = args.flatten timeout = [:timeout] || 0 synchronize do |client| command = [cmd, keys, timeout] timeout += client.timeout if timeout > 0 client.call_with_timeout(command, timeout) end end |
#_eval(cmd, args) ⇒ Object
2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 |
# File 'lib/redis.rb', line 2331 def _eval(cmd, args) script = args.shift = args.pop if args.last.is_a?(Hash) ||= {} keys = args.shift || [:keys] || [] argv = args.shift || [:argv] || [] synchronize do |client| client.call([cmd, script, keys.length] + keys + argv) end end |
#_scan(command, cursor, args, options = {}, &block) ⇒ Object
2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 |
# File 'lib/redis.rb', line 2394 def _scan(command, cursor, args, = {}, &block) # SSCAN/ZSCAN/HSCAN already prepend the key to +args+. args << cursor if match = [:match] args.concat(["MATCH", match]) end if count = [:count] args.concat(["COUNT", count]) end synchronize do |client| client.call([command] + args, &block) end end |
#append(key, value) ⇒ Fixnum
Append a value to a key.
917 918 919 920 921 |
# File 'lib/redis.rb', line 917 def append(key, value) synchronize do |client| client.call([:append, key, value]) end end |
#auth(password) ⇒ String
Authenticate to the server.
87 88 89 90 91 |
# File 'lib/redis.rb', line 87 def auth(password) synchronize do |client| client.call([:auth, password]) end end |
#bgrewriteaof ⇒ String
Asynchronously rewrite the append-only file.
140 141 142 143 144 |
# File 'lib/redis.rb', line 140 def bgrewriteaof synchronize do |client| client.call([:bgrewriteaof]) end end |
#bgsave ⇒ String
Asynchronously save the dataset to disk.
149 150 151 152 153 |
# File 'lib/redis.rb', line 149 def bgsave synchronize do |client| client.call([:bgsave]) end end |
#bitcount(key, start = 0, stop = -1)) ⇒ Fixnum
Count the number of set bits in a range of the string value stored at key.
929 930 931 932 933 |
# File 'lib/redis.rb', line 929 def bitcount(key, start = 0, stop = -1) synchronize do |client| client.call([:bitcount, key, start, stop]) end end |
#bitop(operation, destkey, *keys) ⇒ Fixnum
Perform a bitwise operation between strings and store the resulting string in a key.
941 942 943 944 945 |
# File 'lib/redis.rb', line 941 def bitop(operation, destkey, *keys) synchronize do |client| client.call([:bitop, operation, destkey] + keys) end end |
#bitpos(key, bit, start = nil, stop = nil) ⇒ Fixnum
Return the position of the first bit set to 1 or 0 in a string.
955 956 957 958 959 960 961 962 963 964 965 966 |
# File 'lib/redis.rb', line 955 def bitpos(key, bit, start=nil, stop=nil) if stop and not start raise(ArgumentError, 'stop parameter specified without start parameter') end synchronize do |client| command = [:bitpos, key, bit] command << start if start command << stop if stop client.call(command) end end |
#blpop(*args) ⇒ nil, [String, String]
Remove and get the first element in a list, or block until one is available.
1122 1123 1124 |
# File 'lib/redis.rb', line 1122 def blpop(*args) _bpop(:blpop, args) end |
#brpop(*args) ⇒ nil, [String, String]
Remove and get the last element in a list, or block until one is available.
1138 1139 1140 |
# File 'lib/redis.rb', line 1138 def brpop(*args) _bpop(:brpop, args) end |
#brpoplpush(source, destination, options = {}) ⇒ nil, String
Pop a value from a list, push it to another list and return it; or block until one is available.
1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 |
# File 'lib/redis.rb', line 1153 def brpoplpush(source, destination, = {}) case when Integer # Issue deprecation notice in obnoxious mode... = { :timeout => } end timeout = [:timeout] || 0 synchronize do |client| command = [:brpoplpush, source, destination, timeout] timeout += client.timeout if timeout > 0 client.call_with_timeout(command, timeout) end end |
#config(action, *args) ⇒ String, Hash
Get or set server configuration parameters.
160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/redis.rb', line 160 def config(action, *args) synchronize do |client| client.call([:config, action] + args) do |reply| if reply.kind_of?(Array) && action == :get Hash[_pairify(reply)] else reply end end end end |
#connected? ⇒ Boolean
Test whether or not the client is connected
73 74 75 |
# File 'lib/redis.rb', line 73 def connected? @original_client.connected? end |
#dbsize ⇒ Fixnum
Return the number of keys in the selected database.
175 176 177 178 179 |
# File 'lib/redis.rb', line 175 def dbsize synchronize do |client| client.call([:dbsize]) end end |
#debug(*args) ⇒ Object
181 182 183 184 185 |
# File 'lib/redis.rb', line 181 def debug(*args) synchronize do |client| client.call([:debug] + args) end end |
#decr(key) ⇒ Fixnum
Decrement the integer value of a key by one.
620 621 622 623 624 |
# File 'lib/redis.rb', line 620 def decr(key) synchronize do |client| client.call([:decr, key]) end end |
#decrby(key, decrement) ⇒ Fixnum
Decrement the integer value of a key by the given number.
635 636 637 638 639 |
# File 'lib/redis.rb', line 635 def decrby(key, decrement) synchronize do |client| client.call([:decrby, key, decrement]) end end |
#del(*keys) ⇒ Fixnum
Delete one or more keys.
452 453 454 455 456 |
# File 'lib/redis.rb', line 452 def del(*keys) synchronize do |client| client.call([:del] + keys) end end |
#discard ⇒ String
Discard all commands issued after MULTI.
Only call this method when #multi
was called without a block.
2277 2278 2279 2280 2281 |
# File 'lib/redis.rb', line 2277 def discard synchronize do |client| client.call([:discard]) end end |
#disconnect! ⇒ Object
Disconnect the client as quickly and silently as possible.
78 79 80 |
# File 'lib/redis.rb', line 78 def disconnect! @original_client.disconnect end |
#dump(key) ⇒ String
Return a serialized version of the value stored at a key.
410 411 412 413 414 |
# File 'lib/redis.rb', line 410 def dump(key) synchronize do |client| client.call([:dump, key]) end end |
#dup ⇒ Object
2640 2641 2642 |
# File 'lib/redis.rb', line 2640 def dup self.class.new(@options) end |
#echo(value) ⇒ String
Echo the given string.
117 118 119 120 121 |
# File 'lib/redis.rb', line 117 def echo(value) synchronize do |client| client.call([:echo, value]) end end |
#eval(*args) ⇒ Object
Evaluate Lua script.
2365 2366 2367 |
# File 'lib/redis.rb', line 2365 def eval(*args) _eval(:eval, args) end |
#evalsha(*args) ⇒ Object
Evaluate Lua script by its SHA.
2390 2391 2392 |
# File 'lib/redis.rb', line 2390 def evalsha(*args) _eval(:evalsha, args) end |
#exec ⇒ nil, Array<...>
Execute all commands issued after MULTI.
Only call this method when #multi
was called without a block.
2263 2264 2265 2266 2267 |
# File 'lib/redis.rb', line 2263 def exec synchronize do |client| client.call([:exec]) end end |
#exists(key) ⇒ Boolean
Determine if a key exists.
462 463 464 465 466 |
# File 'lib/redis.rb', line 462 def exists(key) synchronize do |client| client.call([:exists, key], &_boolify) end end |
#expire(key, seconds) ⇒ Boolean
Set a key's time to live in seconds.
332 333 334 335 336 |
# File 'lib/redis.rb', line 332 def expire(key, seconds) synchronize do |client| client.call([:expire, key, seconds], &_boolify) end end |
#expireat(key, unix_time) ⇒ Boolean
Set the expiration for a key as a UNIX timestamp.
343 344 345 346 347 |
# File 'lib/redis.rb', line 343 def expireat(key, unix_time) synchronize do |client| client.call([:expireat, key, unix_time], &_boolify) end end |
#flushall ⇒ String
Remove all keys from all databases.
190 191 192 193 194 |
# File 'lib/redis.rb', line 190 def flushall synchronize do |client| client.call([:flushall]) end end |
#flushdb ⇒ String
Remove all keys from the current database.
199 200 201 202 203 |
# File 'lib/redis.rb', line 199 def flushdb synchronize do |client| client.call([:flushdb]) end end |
#get(key) ⇒ String Also known as: []
Get the value of a key.
820 821 822 823 824 |
# File 'lib/redis.rb', line 820 def get(key) synchronize do |client| client.call([:get, key]) end end |
#getbit(key, offset) ⇒ Fixnum
Returns the bit value at offset in the string value stored at key.
906 907 908 909 910 |
# File 'lib/redis.rb', line 906 def getbit(key, offset) synchronize do |client| client.call([:getbit, key, offset]) end end |
#getrange(key, start, stop) ⇒ Fixnum
Get a substring of the string stored at a key.
883 884 885 886 887 |
# File 'lib/redis.rb', line 883 def getrange(key, start, stop) synchronize do |client| client.call([:getrange, key, start, stop]) end end |
#getset(key, value) ⇒ String
Set the string value of a key and return its old value.
974 975 976 977 978 |
# File 'lib/redis.rb', line 974 def getset(key, value) synchronize do |client| client.call([:getset, key, value.to_s]) end end |
#hdel(key, field) ⇒ Fixnum
Delete one or more hash fields.
2011 2012 2013 2014 2015 |
# File 'lib/redis.rb', line 2011 def hdel(key, field) synchronize do |client| client.call([:hdel, key, field]) end end |
#hexists(key, field) ⇒ Boolean
Determine if a hash field exists.
2022 2023 2024 2025 2026 |
# File 'lib/redis.rb', line 2022 def hexists(key, field) synchronize do |client| client.call([:hexists, key, field], &_boolify) end end |
#hget(key, field) ⇒ String
Get the value of a hash field.
1962 1963 1964 1965 1966 |
# File 'lib/redis.rb', line 1962 def hget(key, field) synchronize do |client| client.call([:hget, key, field]) end end |
#hgetall(key) ⇒ Hash<String, String>
Get all the fields and values in a hash.
2076 2077 2078 2079 2080 |
# File 'lib/redis.rb', line 2076 def hgetall(key) synchronize do |client| client.call([:hgetall, key], &_hashify) end end |
#hincrby(key, field, increment) ⇒ Fixnum
Increment the integer value of a hash field by the given integer number.
2034 2035 2036 2037 2038 |
# File 'lib/redis.rb', line 2034 def hincrby(key, field, increment) synchronize do |client| client.call([:hincrby, key, field, increment]) end end |
#hincrbyfloat(key, field, increment) ⇒ Float
Increment the numeric value of a hash field by the given float number.
2046 2047 2048 2049 2050 |
# File 'lib/redis.rb', line 2046 def hincrbyfloat(key, field, increment) synchronize do |client| client.call([:hincrbyfloat, key, field, increment], &_floatify) end end |
#hkeys(key) ⇒ Array<String>
Get all the fields in a hash.
2056 2057 2058 2059 2060 |
# File 'lib/redis.rb', line 2056 def hkeys(key) synchronize do |client| client.call([:hkeys, key]) end end |
#hlen(key) ⇒ Fixnum
Get the number of fields in a hash.
1895 1896 1897 1898 1899 |
# File 'lib/redis.rb', line 1895 def hlen(key) synchronize do |client| client.call([:hlen, key]) end end |
#hmget(key, *fields, &blk) ⇒ Array<String>
Get the values of all the given hash fields.
1979 1980 1981 1982 1983 |
# File 'lib/redis.rb', line 1979 def hmget(key, *fields, &blk) synchronize do |client| client.call([:hmget, key] + fields, &blk) end end |
#hmset(key, *attrs) ⇒ String
Set one or more hash values.
1936 1937 1938 1939 1940 |
# File 'lib/redis.rb', line 1936 def hmset(key, *attrs) synchronize do |client| client.call([:hmset, key] + attrs) end end |
#hscan(key, cursor, options = {}) ⇒ String, Array<[String, String]>
Scan a hash
2467 2468 2469 2470 2471 |
# File 'lib/redis.rb', line 2467 def hscan(key, cursor, ={}) _scan(:hscan, cursor, [key], ) do |reply| [reply[0], _pairify(reply[1])] end end |
#hscan_each(key, options = {}, &block) ⇒ Enumerator
Scan a hash
2484 2485 2486 2487 2488 2489 2490 2491 2492 |
# File 'lib/redis.rb', line 2484 def hscan_each(key, ={}, &block) return to_enum(:hscan_each, key, ) unless block_given? cursor = 0 loop do cursor, values = hscan(key, cursor, ) values.each(&block) break if cursor == "0" end end |
#hset(key, field, value) ⇒ Boolean
Set the string value of a hash field.
1907 1908 1909 1910 1911 |
# File 'lib/redis.rb', line 1907 def hset(key, field, value) synchronize do |client| client.call([:hset, key, field, value], &_boolify) end end |
#hsetnx(key, field, value) ⇒ Boolean
Set the value of a hash field, only if the field does not exist.
1919 1920 1921 1922 1923 |
# File 'lib/redis.rb', line 1919 def hsetnx(key, field, value) synchronize do |client| client.call([:hsetnx, key, field, value], &_boolify) end end |
#hvals(key) ⇒ Array<String>
Get all the values in a hash.
2066 2067 2068 2069 2070 |
# File 'lib/redis.rb', line 2066 def hvals(key) synchronize do |client| client.call([:hvals, key]) end end |
#id ⇒ Object
2632 2633 2634 |
# File 'lib/redis.rb', line 2632 def id @original_client.id end |
#incr(key) ⇒ Fixnum
Increment the integer value of a key by one.
649 650 651 652 653 |
# File 'lib/redis.rb', line 649 def incr(key) synchronize do |client| client.call([:incr, key]) end end |
#incrby(key, increment) ⇒ Fixnum
Increment the integer value of a key by the given integer number.
664 665 666 667 668 |
# File 'lib/redis.rb', line 664 def incrby(key, increment) synchronize do |client| client.call([:incrby, key, increment]) end end |
#incrbyfloat(key, increment) ⇒ Float
Increment the numeric value of a key by the given float number.
679 680 681 682 683 |
# File 'lib/redis.rb', line 679 def incrbyfloat(key, increment) synchronize do |client| client.call([:incrbyfloat, key, increment], &_floatify) end end |
#info(cmd = nil) ⇒ Hash<String, String>
Get information and statistics about the server.
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/redis.rb', line 209 def info(cmd = nil) synchronize do |client| client.call([:info, cmd].compact) do |reply| if reply.kind_of?(String) reply = Hash[reply.split("\r\n").map do |line| line.split(":", 2) unless line =~ /^(#|$)/ end.compact] if cmd && cmd.to_s == "commandstats" # Extract nested hashes for INFO COMMANDSTATS reply = Hash[reply.map do |k, v| v = v.split(",").map { |e| e.split("=") } [k[/^cmdstat_(.*)$/, 1], Hash[v]] end] end end reply end end end |
#inspect ⇒ Object
2636 2637 2638 |
# File 'lib/redis.rb', line 2636 def inspect "#<Redis client v#{Redis::VERSION} for #{id}>" end |
#keys(pattern = "*") ⇒ Array<String>
Find all keys matching the given pattern.
472 473 474 475 476 477 478 479 480 481 482 |
# File 'lib/redis.rb', line 472 def keys(pattern = "*") synchronize do |client| client.call([:keys, pattern]) do |reply| if reply.kind_of?(String) reply.split(" ") else reply end end end end |
#lastsave ⇒ Fixnum
Get the UNIX time stamp of the last successful save to disk.
234 235 236 237 238 |
# File 'lib/redis.rb', line 234 def lastsave synchronize do |client| client.call([:lastsave]) end end |
#lindex(key, index) ⇒ String
Get an element from a list by its index.
1174 1175 1176 1177 1178 |
# File 'lib/redis.rb', line 1174 def lindex(key, index) synchronize do |client| client.call([:lindex, key, index]) end end |
#linsert(key, where, pivot, value) ⇒ Fixnum
Insert an element before or after another element in a list.
1188 1189 1190 1191 1192 |
# File 'lib/redis.rb', line 1188 def linsert(key, where, pivot, value) synchronize do |client| client.call([:linsert, key, where, pivot, value]) end end |
#llen(key) ⇒ Fixnum
Get the length of a list.
995 996 997 998 999 |
# File 'lib/redis.rb', line 995 def llen(key) synchronize do |client| client.call([:llen, key]) end end |
#lpop(key) ⇒ String
Remove and get the first element in a list.
1049 1050 1051 1052 1053 |
# File 'lib/redis.rb', line 1049 def lpop(key) synchronize do |client| client.call([:lpop, key]) end end |
#lpush(key, value) ⇒ Fixnum
Prepend one or more values to a list, creating the list if it doesn't exist
1006 1007 1008 1009 1010 |
# File 'lib/redis.rb', line 1006 def lpush(key, value) synchronize do |client| client.call([:lpush, key, value]) end end |
#lpushx(key, value) ⇒ Fixnum
Prepend a value to a list, only if the list exists.
1017 1018 1019 1020 1021 |
# File 'lib/redis.rb', line 1017 def lpushx(key, value) synchronize do |client| client.call([:lpushx, key, value]) end end |
#lrange(key, start, stop) ⇒ Array<String>
Get a range of elements from a list.
1200 1201 1202 1203 1204 |
# File 'lib/redis.rb', line 1200 def lrange(key, start, stop) synchronize do |client| client.call([:lrange, key, start, stop]) end end |
#lrem(key, count, value) ⇒ Fixnum
Remove elements from a list.
1215 1216 1217 1218 1219 |
# File 'lib/redis.rb', line 1215 def lrem(key, count, value) synchronize do |client| client.call([:lrem, key, count, value]) end end |
#lset(key, index, value) ⇒ String
Set the value of an element in a list by its index.
1227 1228 1229 1230 1231 |
# File 'lib/redis.rb', line 1227 def lset(key, index, value) synchronize do |client| client.call([:lset, key, index, value]) end end |
#ltrim(key, start, stop) ⇒ String
Trim a list to the specified range.
1239 1240 1241 1242 1243 |
# File 'lib/redis.rb', line 1239 def ltrim(key, start, stop) synchronize do |client| client.call([:ltrim, key, start, stop]) end end |
#mapped_hmget(key, *fields) ⇒ Hash
Get the values of all the given hash fields.
1996 1997 1998 1999 2000 2001 2002 2003 2004 |
# File 'lib/redis.rb', line 1996 def mapped_hmget(key, *fields) hmget(key, *fields) do |reply| if reply.kind_of?(Array) Hash[fields.zip(reply)] else reply end end end |
#mapped_hmset(key, hash) ⇒ String
Set one or more hash values.
1953 1954 1955 |
# File 'lib/redis.rb', line 1953 def mapped_hmset(key, hash) hmset(key, hash.to_a.flatten) end |
#mapped_mget(*keys) ⇒ Hash
Get the values of all the given keys.
854 855 856 857 858 859 860 861 862 |
# File 'lib/redis.rb', line 854 def mapped_mget(*keys) mget(*keys) do |reply| if reply.kind_of?(Array) Hash[keys.zip(reply)] else reply end end end |
#mapped_mset(hash) ⇒ String
Set one or more values.
782 783 784 |
# File 'lib/redis.rb', line 782 def mapped_mset(hash) mset(hash.to_a.flatten) end |
#mapped_msetnx(hash) ⇒ Boolean
Set one or more values, only if none of the keys exist.
812 813 814 |
# File 'lib/redis.rb', line 812 def mapped_msetnx(hash) msetnx(hash.to_a.flatten) end |
#mget(*keys, &blk) ⇒ Array<String>
Get the values of all the given keys.
838 839 840 841 842 |
# File 'lib/redis.rb', line 838 def mget(*keys, &blk) synchronize do |client| client.call([:mget] + keys, &blk) end end |
#migrate(key, options) ⇒ String
Transfer a key from the connected instance to another instance.
437 438 439 440 441 442 443 444 445 446 |
# File 'lib/redis.rb', line 437 def migrate(key, ) host = [:host] || raise(RuntimeError, ":host not specified") port = [:port] || raise(RuntimeError, ":port not specified") db = ([:db] || client.db).to_i timeout = ([:timeout] || client.timeout).to_i synchronize do |client| client.call([:migrate, host, port, key, db, timeout]) end end |
#monitor {|line| ... } ⇒ Object
Listen for all requests received by the server in real time.
There is no way to interrupt this command.
246 247 248 249 250 |
# File 'lib/redis.rb', line 246 def monitor(&block) synchronize do |client| client.call_loop([:monitor], &block) end end |
#move(key, db) ⇒ Boolean
Move a key to another database.
503 504 505 506 507 |
# File 'lib/redis.rb', line 503 def move(key, db) synchronize do |client| client.call([:move, key, db], &_boolify) end end |
#mset(*args) ⇒ String
Set one or more values.
766 767 768 769 770 |
# File 'lib/redis.rb', line 766 def mset(*args) synchronize do |client| client.call([:mset] + args) end end |
#msetnx(*args) ⇒ Boolean
Set one or more values, only if none of the keys exist.
796 797 798 799 800 |
# File 'lib/redis.rb', line 796 def msetnx(*args) synchronize do |client| client.call([:msetnx] + args, &_boolify) end end |
#multi {|multi| ... } ⇒ String, Array<...>
Mark the start of a transaction block.
Passing a block is optional.
2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 |
# File 'lib/redis.rb', line 2236 def multi synchronize do |client| if !block_given? client.call([:multi]) else begin pipeline = Pipeline::Multi.new original, @client = @client, pipeline yield(self) original.call_pipeline(pipeline) ensure @client = original end end end end |
#object(*args) ⇒ Object
509 510 511 512 513 |
# File 'lib/redis.rb', line 509 def object(*args) synchronize do |client| client.call([:object] + args) end end |
#persist(key) ⇒ Boolean
Remove the expiration from a key.
321 322 323 324 325 |
# File 'lib/redis.rb', line 321 def persist(key) synchronize do |client| client.call([:persist, key], &_boolify) end end |
#pexpire(key, milliseconds) ⇒ Boolean
Set a key's time to live in milliseconds.
372 373 374 375 376 |
# File 'lib/redis.rb', line 372 def pexpire(key, milliseconds) synchronize do |client| client.call([:pexpire, key, milliseconds], &_boolify) end end |
#pexpireat(key, ms_unix_time) ⇒ Boolean
Set the expiration for a key as number of milliseconds from UNIX Epoch.
383 384 385 386 387 |
# File 'lib/redis.rb', line 383 def pexpireat(key, ms_unix_time) synchronize do |client| client.call([:pexpireat, key, ms_unix_time], &_boolify) end end |
#pfadd(key, member) ⇒ Boolean
Add one or more members to a HyperLogLog structure.
2574 2575 2576 2577 2578 |
# File 'lib/redis.rb', line 2574 def pfadd(key, member) synchronize do |client| client.call([:pfadd, key, member], &_boolify) end end |
#pfcount(*keys) ⇒ Fixnum
Get the approximate cardinality of members added to HyperLogLog structure.
If called with multiple keys, returns the approximate cardinality of the union of the HyperLogLogs contained in the keys.
2587 2588 2589 2590 2591 |
# File 'lib/redis.rb', line 2587 def pfcount(*keys) synchronize do |client| client.call([:pfcount] + keys) end end |
#pfmerge(dest_key, *source_key) ⇒ Boolean
Merge multiple HyperLogLog values into an unique value that will approximate the cardinality of the union of the observed Sets of the source HyperLogLog structures.
2599 2600 2601 2602 2603 |
# File 'lib/redis.rb', line 2599 def pfmerge(dest_key, *source_key) synchronize do |client| client.call([:pfmerge, dest_key, *source_key], &_boolify_set) end end |
#ping ⇒ String
Ping the server.
107 108 109 110 111 |
# File 'lib/redis.rb', line 107 def ping synchronize do |client| client.call([:ping]) end end |
#pipelined ⇒ Object
2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 |
# File 'lib/redis.rb', line 2194 def pipelined synchronize do |client| begin original, @client = @client, Pipeline.new yield(self) original.call_pipeline(@client) ensure @client = original end end end |
#psetex(key, ttl, value) ⇒ String
Set the time to live in milliseconds of a key.
739 740 741 742 743 |
# File 'lib/redis.rb', line 739 def psetex(key, ttl, value) synchronize do |client| client.call([:psetex, key, ttl, value.to_s]) end end |
#psubscribe(*channels, &block) ⇒ Object
Listen for messages published to channels matching the given patterns.
2111 2112 2113 2114 2115 |
# File 'lib/redis.rb', line 2111 def psubscribe(*channels, &block) synchronize do |client| _subscription(:psubscribe, channels, block) end end |
#pttl(key) ⇒ Fixnum
Get the time to live (in milliseconds) for a key.
In Redis 2.6 or older the command returns -1 if the key does not exist or if the key exist but has no associated expire.
Starting with Redis 2.8 the return value in case of error changed:
- The command returns -2 if the key does not exist.
- The command returns -1 if the key exists but has no associated expire.
400 401 402 403 404 |
# File 'lib/redis.rb', line 400 def pttl(key) synchronize do |client| client.call([:pttl, key]) end end |
#publish(channel, message) ⇒ Object
Post a message to a channel.
2083 2084 2085 2086 2087 |
# File 'lib/redis.rb', line 2083 def publish(channel, ) synchronize do |client| client.call([:publish, channel, ]) end end |
#pubsub(subcommand, *args) ⇒ Object
Inspect the state of the Pub/Sub subsystem. Possible subcommands: channels, numsub, numpat.
2127 2128 2129 2130 2131 |
# File 'lib/redis.rb', line 2127 def pubsub(subcommand, *args) synchronize do |client| client.call([:pubsub, subcommand] + args) end end |
#punsubscribe(*channels) ⇒ Object
Stop listening for messages posted to channels matching the given patterns.
2118 2119 2120 2121 2122 2123 |
# File 'lib/redis.rb', line 2118 def punsubscribe(*channels) synchronize do |client| raise RuntimeError, "Can't unsubscribe if not subscribed." unless subscribed? client.punsubscribe(*channels) end end |
#quit ⇒ String
Close the connection.
126 127 128 129 130 131 132 133 134 135 |
# File 'lib/redis.rb', line 126 def quit synchronize do |client| begin client.call([:quit]) rescue ConnectionError ensure client.disconnect end end end |
#randomkey ⇒ String
Return a random key from the keyspace.
518 519 520 521 522 |
# File 'lib/redis.rb', line 518 def randomkey synchronize do |client| client.call([:randomkey]) end end |
#rename(old_name, new_name) ⇒ String
Rename a key. If the new key already exists it is overwritten.
529 530 531 532 533 |
# File 'lib/redis.rb', line 529 def rename(old_name, new_name) synchronize do |client| client.call([:rename, old_name, new_name]) end end |
#renamenx(old_name, new_name) ⇒ Boolean
Rename a key, only if the new key does not exist.
540 541 542 543 544 |
# File 'lib/redis.rb', line 540 def renamenx(old_name, new_name) synchronize do |client| client.call([:renamenx, old_name, new_name], &_boolify) end end |
#restore(key, ttl, serialized_value) ⇒ String
Create a key using the serialized value, previously obtained using DUMP.
422 423 424 425 426 |
# File 'lib/redis.rb', line 422 def restore(key, ttl, serialized_value) synchronize do |client| client.call([:restore, key, ttl, serialized_value]) end end |
#rpop(key) ⇒ String
Remove and get the last element in a list.
1059 1060 1061 1062 1063 |
# File 'lib/redis.rb', line 1059 def rpop(key) synchronize do |client| client.call([:rpop, key]) end end |
#rpoplpush(source, destination) ⇒ nil, String
Remove the last element in a list, append it to another list and return it.
1070 1071 1072 1073 1074 |
# File 'lib/redis.rb', line 1070 def rpoplpush(source, destination) synchronize do |client| client.call([:rpoplpush, source, destination]) end end |
#rpush(key, value) ⇒ Fixnum
Append one or more values to a list, creating the list if it doesn't exist
1028 1029 1030 1031 1032 |
# File 'lib/redis.rb', line 1028 def rpush(key, value) synchronize do |client| client.call([:rpush, key, value]) end end |
#rpushx(key, value) ⇒ Fixnum
Append a value to a list, only if the list exists.
1039 1040 1041 1042 1043 |
# File 'lib/redis.rb', line 1039 def rpushx(key, value) synchronize do |client| client.call([:rpushx, key, value]) end end |
#sadd(key, member) ⇒ Boolean, Fixnum
Add one or more members to a set.
1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 |
# File 'lib/redis.rb', line 1263 def sadd(key, member) synchronize do |client| client.call([:sadd, key, member]) do |reply| if member.is_a? Array # Variadic: return integer reply else # Single argument: return boolean _boolify.call(reply) end end end end |
#save ⇒ String
Synchronously save the dataset to disk.
255 256 257 258 259 |
# File 'lib/redis.rb', line 255 def save synchronize do |client| client.call([:save]) end end |
#scan(cursor, options = {}) ⇒ String+
Scan the keyspace
2427 2428 2429 |
# File 'lib/redis.rb', line 2427 def scan(cursor, ={}) _scan(:scan, cursor, [], ) end |
#scan_each(options = {}, &block) ⇒ Enumerator
Scan the keyspace
2446 2447 2448 2449 2450 2451 2452 2453 2454 |
# File 'lib/redis.rb', line 2446 def scan_each(={}, &block) return to_enum(:scan_each, ) unless block_given? cursor = 0 loop do cursor, keys = scan(cursor, ) keys.each(&block) break if cursor == "0" end end |
#scard(key) ⇒ Fixnum
Get the number of members in a set.
1249 1250 1251 1252 1253 |
# File 'lib/redis.rb', line 1249 def scard(key) synchronize do |client| client.call([:scard, key]) end end |
#script(subcommand, *args) ⇒ String, ...
Control remote script registry.
2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 |
# File 'lib/redis.rb', line 2307 def script(subcommand, *args) subcommand = subcommand.to_s.downcase if subcommand == "exists" synchronize do |client| arg = args.first client.call([:script, :exists, arg]) do |reply| reply = reply.map { |r| _boolify.call(r) } if arg.is_a?(Array) reply else reply.first end end end else synchronize do |client| client.call([:script, subcommand] + args) end end end |
#sdiff(*keys) ⇒ Array<String>
Subtract multiple sets.
1361 1362 1363 1364 1365 |
# File 'lib/redis.rb', line 1361 def sdiff(*keys) synchronize do |client| client.call([:sdiff] + keys) end end |
#sdiffstore(destination, *keys) ⇒ Fixnum
Subtract multiple sets and store the resulting set in a key.
1372 1373 1374 1375 1376 |
# File 'lib/redis.rb', line 1372 def sdiffstore(destination, *keys) synchronize do |client| client.call([:sdiffstore, destination] + keys) end end |
#select(db) ⇒ String
Change the selected database for the current connection.
97 98 99 100 101 102 |
# File 'lib/redis.rb', line 97 def select(db) synchronize do |client| client.db = db client.call([:select, db]) end end |
#sentinel(subcommand, *args) ⇒ Array<String>, ...
Interact with the sentinel command (masters, master, slaves, failover)
2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 |
# File 'lib/redis.rb', line 2610 def sentinel(subcommand, *args) subcommand = subcommand.to_s.downcase synchronize do |client| client.call([:sentinel, subcommand] + args) do |reply| case subcommand when "get-master-addr-by-name" reply else if reply.kind_of?(Array) if reply[0].kind_of?(Array) reply.map(&_hashify) else _hashify.call(reply) end else reply end end end end end |
#set(key, value, options = {}) ⇒ String, Boolean Also known as: []=
Set the string value of a key.
695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 |
# File 'lib/redis.rb', line 695 def set(key, value, = {}) args = [] ex = [:ex] args.concat(["EX", ex]) if ex px = [:px] args.concat(["PX", px]) if px nx = [:nx] args.concat(["NX"]) if nx xx = [:xx] args.concat(["XX"]) if xx synchronize do |client| if nx || xx client.call([:set, key, value.to_s] + args, &_boolify_set) else client.call([:set, key, value.to_s] + args) end end end |
#setbit(key, offset, value) ⇒ Fixnum
Sets or clears the bit at offset in the string value stored at key.
895 896 897 898 899 |
# File 'lib/redis.rb', line 895 def setbit(key, offset, value) synchronize do |client| client.call([:setbit, key, offset, value]) end end |
#setex(key, ttl, value) ⇒ String
Set the time to live in seconds of a key.
727 728 729 730 731 |
# File 'lib/redis.rb', line 727 def setex(key, ttl, value) synchronize do |client| client.call([:setex, key, ttl, value.to_s]) end end |
#setnx(key, value) ⇒ Boolean
Set the value of a key, only if the key does not exist.
750 751 752 753 754 |
# File 'lib/redis.rb', line 750 def setnx(key, value) synchronize do |client| client.call([:setnx, key, value.to_s], &_boolify) end end |
#setrange(key, offset, value) ⇒ Fixnum
Overwrite part of a string at key starting at the specified offset.
870 871 872 873 874 |
# File 'lib/redis.rb', line 870 def setrange(key, offset, value) synchronize do |client| client.call([:setrange, key, offset, value.to_s]) end end |
#shutdown ⇒ Object
Synchronously save the dataset to disk and then shut down the server.
262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'lib/redis.rb', line 262 def shutdown synchronize do |client| client.with_reconnect(false) do begin client.call([:shutdown]) rescue ConnectionError # This means Redis has probably exited. nil end end end end |
#sinter(*keys) ⇒ Array<String>
Intersect multiple sets.
1382 1383 1384 1385 1386 |
# File 'lib/redis.rb', line 1382 def sinter(*keys) synchronize do |client| client.call([:sinter] + keys) end end |
#sinterstore(destination, *keys) ⇒ Fixnum
Intersect multiple sets and store the resulting set in a key.
1393 1394 1395 1396 1397 |
# File 'lib/redis.rb', line 1393 def sinterstore(destination, *keys) synchronize do |client| client.call([:sinterstore, destination] + keys) end end |
#sismember(key, member) ⇒ Boolean
Determine if a given value is a member of a set.
1341 1342 1343 1344 1345 |
# File 'lib/redis.rb', line 1341 def sismember(key, member) synchronize do |client| client.call([:sismember, key, member], &_boolify) end end |
#slaveof(host, port) ⇒ Object
Make the server a slave of another instance, or promote it as master.
276 277 278 279 280 |
# File 'lib/redis.rb', line 276 def slaveof(host, port) synchronize do |client| client.call([:slaveof, host, port]) end end |
#slowlog(subcommand, length = nil) ⇒ Array<String>, ...
Interact with the slowlog (get, len, reset)
287 288 289 290 291 292 293 |
# File 'lib/redis.rb', line 287 def slowlog(subcommand, length=nil) synchronize do |client| args = [:slowlog, subcommand] args << length if length client.call args end end |
#smembers(key) ⇒ Array<String>
Get all the members in a set.
1351 1352 1353 1354 1355 |
# File 'lib/redis.rb', line 1351 def smembers(key) synchronize do |client| client.call([:smembers, key]) end end |
#smove(source, destination, member) ⇒ Boolean
Move a member from one set to another.
1330 1331 1332 1333 1334 |
# File 'lib/redis.rb', line 1330 def smove(source, destination, member) synchronize do |client| client.call([:smove, source, destination, member], &_boolify) end end |
#sort(key, options = {}) ⇒ Array<String>, ...
Sort the elements in a list, set or sorted set.
571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 |
# File 'lib/redis.rb', line 571 def sort(key, = {}) args = [] by = [:by] args.concat(["BY", by]) if by limit = [:limit] args.concat(["LIMIT"] + limit) if limit get = Array([:get]) args.concat(["GET"].product(get).flatten) unless get.empty? order = [:order] args.concat(order.split(" ")) if order store = [:store] args.concat(["STORE", store]) if store synchronize do |client| client.call([:sort, key] + args) do |reply| if get.size > 1 && !store if reply reply.each_slice(get.size).to_a end else reply end end end end |
#spop(key) ⇒ String
Remove and return a random member from a set.
1303 1304 1305 1306 1307 |
# File 'lib/redis.rb', line 1303 def spop(key) synchronize do |client| client.call([:spop, key]) end end |
#srandmember(key, count = nil) ⇒ String
Get one or more random members from a set.
1314 1315 1316 1317 1318 1319 1320 1321 1322 |
# File 'lib/redis.rb', line 1314 def srandmember(key, count = nil) synchronize do |client| if count.nil? client.call([:srandmember, key]) else client.call([:srandmember, key, count]) end end end |
#srem(key, member) ⇒ Boolean, Fixnum
Remove one or more members from a set.
1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 |
# File 'lib/redis.rb', line 1285 def srem(key, member) synchronize do |client| client.call([:srem, key, member]) do |reply| if member.is_a? Array # Variadic: return integer reply else # Single argument: return boolean _boolify.call(reply) end end end end |
#sscan(key, cursor, options = {}) ⇒ String+
Scan a set
2544 2545 2546 |
# File 'lib/redis.rb', line 2544 def sscan(key, cursor, ={}) _scan(:sscan, cursor, [key], ) end |
#sscan_each(key, options = {}, &block) ⇒ Enumerator
Scan a set
2559 2560 2561 2562 2563 2564 2565 2566 2567 |
# File 'lib/redis.rb', line 2559 def sscan_each(key, ={}, &block) return to_enum(:sscan_each, key, ) unless block_given? cursor = 0 loop do cursor, keys = sscan(key, cursor, ) keys.each(&block) break if cursor == "0" end end |
#strlen(key) ⇒ Fixnum
Get the length of the value stored in a key.
985 986 987 988 989 |
# File 'lib/redis.rb', line 985 def strlen(key) synchronize do |client| client.call([:strlen, key]) end end |
#subscribe(*channels, &block) ⇒ Object
Listen for messages published to the given channels.
2096 2097 2098 2099 2100 |
# File 'lib/redis.rb', line 2096 def subscribe(*channels, &block) synchronize do |client| _subscription(:subscribe, channels, block) end end |
#subscribed? ⇒ Boolean
2089 2090 2091 2092 2093 |
# File 'lib/redis.rb', line 2089 def subscribed? synchronize do |client| client.kind_of? SubscribedClient end end |
#sunion(*keys) ⇒ Array<String>
Add multiple sets.
1403 1404 1405 1406 1407 |
# File 'lib/redis.rb', line 1403 def sunion(*keys) synchronize do |client| client.call([:sunion] + keys) end end |
#sunionstore(destination, *keys) ⇒ Fixnum
Add multiple sets and store the resulting set in a key.
1414 1415 1416 1417 1418 |
# File 'lib/redis.rb', line 1414 def sunionstore(destination, *keys) synchronize do |client| client.call([:sunionstore, destination] + keys) end end |
#sync ⇒ Object
Internal command used for replication.
296 297 298 299 300 |
# File 'lib/redis.rb', line 296 def sync synchronize do |client| client.call([:sync]) end end |
#synchronize ⇒ Object
56 57 58 |
# File 'lib/redis.rb', line 56 def synchronize mon_synchronize { yield(@client) } end |
#time ⇒ Array<Fixnum>
Return the server time.
309 310 311 312 313 314 315 |
# File 'lib/redis.rb', line 309 def time synchronize do |client| client.call([:time]) do |reply| reply.map(&:to_i) if reply end end end |
#ttl(key) ⇒ Fixnum
Get the time to live (in seconds) for a key.
In Redis 2.6 or older the command returns -1 if the key does not exist or if the key exist but has no associated expire.
Starting with Redis 2.8 the return value in case of error changed:
- The command returns -2 if the key does not exist.
- The command returns -1 if the key exists but has no associated expire.
361 362 363 364 365 |
# File 'lib/redis.rb', line 361 def ttl(key) synchronize do |client| client.call([:ttl, key]) end end |
#type(key) ⇒ String
Determine the type stored at key.
606 607 608 609 610 |
# File 'lib/redis.rb', line 606 def type(key) synchronize do |client| client.call([:type, key]) end end |
#unsubscribe(*channels) ⇒ Object
Stop listening for messages posted to the given channels.
2103 2104 2105 2106 2107 2108 |
# File 'lib/redis.rb', line 2103 def unsubscribe(*channels) synchronize do |client| raise RuntimeError, "Can't unsubscribe if not subscribed." unless subscribed? client.unsubscribe(*channels) end end |
#unwatch ⇒ String
Forget about all watched keys.
2188 2189 2190 2191 2192 |
# File 'lib/redis.rb', line 2188 def unwatch synchronize do |client| client.call([:unwatch]) end end |
#watch(*keys) ⇒ Object, String
Watch the given keys to determine execution of the MULTI/EXEC block.
Using a block is optional, but is necessary for thread-safety.
An #unwatch
is automatically issued if an exception is raised within the
block that is a subclass of StandardError and is not a ConnectionError.
2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 |
# File 'lib/redis.rb', line 2163 def watch(*keys) synchronize do |client| res = client.call([:watch] + keys) if block_given? begin yield(self) rescue ConnectionError raise rescue StandardError unwatch raise end else res end end end |
#with_reconnect(val = true, &blk) ⇒ Object
Run code with the client reconnecting
61 62 63 64 65 |
# File 'lib/redis.rb', line 61 def with_reconnect(val=true, &blk) synchronize do |client| client.with_reconnect(val, &blk) end end |
#without_reconnect(&blk) ⇒ Object
Run code without the client reconnecting
68 69 70 |
# File 'lib/redis.rb', line 68 def without_reconnect(&blk) with_reconnect(false, &blk) end |
#zadd(key, *args) ⇒ Boolean, ...
Add one or more members to a sorted set, or update the score for members that already exist.
1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 |
# File 'lib/redis.rb', line 1465 def zadd(key, *args) #, options = [] if args.last.is_a?(Hash) = args.pop nx = [:nx] << "NX" if nx xx = [:xx] << "XX" if xx ch = [:ch] << "CH" if ch incr = [:incr] << "INCR" if incr end synchronize do |client| if args.size == 1 && args[0].is_a?(Array) # Variadic: return float if INCR, integer if !INCR client.call([:zadd, key] + + args[0], &(incr ? _floatify : _identity)) elsif args.size == 2 # Single pair: return float if INCR, boolean if !INCR client.call([:zadd, key] + + args, &(incr ? _floatify : _boolify)) else raise ArgumentError, "wrong number of arguments" end end end |
#zcard(key) ⇒ Fixnum
Get the number of members in a sorted set.
1428 1429 1430 1431 1432 |
# File 'lib/redis.rb', line 1428 def zcard(key) synchronize do |client| client.call([:zcard, key]) end end |
#zcount(key, min, max) ⇒ Fixnum
Count the members in a sorted set with scores within the given values.
1830 1831 1832 1833 1834 |
# File 'lib/redis.rb', line 1830 def zcount(key, min, max) synchronize do |client| client.call([:zcount, key, min, max]) end end |
#zincrby(key, increment, member) ⇒ Float
Increment the score of a member in a sorted set.
1506 1507 1508 1509 1510 |
# File 'lib/redis.rb', line 1506 def zincrby(key, increment, member) synchronize do |client| client.call([:zincrby, key, increment, member], &_floatify) end end |
#zinterstore(destination, keys, options = {}) ⇒ Fixnum
Intersect multiple sorted sets and store the resulting sorted set in a new key.
1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 |
# File 'lib/redis.rb', line 1850 def zinterstore(destination, keys, = {}) args = [] weights = [:weights] args.concat(["WEIGHTS"] + weights) if weights aggregate = [:aggregate] args.concat(["AGGREGATE", aggregate]) if aggregate synchronize do |client| client.call([:zinterstore, destination, keys.size] + keys + args) end end |
#zrange(key, start, stop, options = {}) ⇒ Array<String>, Array<[String, Float]>
Return a range of members in a sorted set, by index.
1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 |
# File 'lib/redis.rb', line 1576 def zrange(key, start, stop, = {}) args = [] with_scores = [:with_scores] || [:withscores] if with_scores args << "WITHSCORES" block = _floatify_pairs end synchronize do |client| client.call([:zrange, key, start, stop] + args, &block) end end |
#zrangebylex(key, min, max, options = {}) ⇒ Array<String>, Array<[String, Float]>
Return a range of members with the same score in a sorted set, by lexicographical ordering
1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 |
# File 'lib/redis.rb', line 1680 def zrangebylex(key, min, max, = {}) args = [] limit = [:limit] args.concat(["LIMIT"] + limit) if limit synchronize do |client| client.call([:zrangebylex, key, min, max] + args) end end |
#zrangebyscore(key, min, max, options = {}) ⇒ Array<String>, Array<[String, Float]>
Return a range of members in a sorted set, by score.
1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 |
# File 'lib/redis.rb', line 1740 def zrangebyscore(key, min, max, = {}) args = [] with_scores = [:with_scores] || [:withscores] if with_scores args << "WITHSCORES" block = _floatify_pairs end limit = [:limit] args.concat(["LIMIT"] + limit) if limit synchronize do |client| client.call([:zrangebyscore, key, min, max] + args, &block) end end |
#zrank(key, member) ⇒ Fixnum
Determine the index of a member in a sorted set.
1622 1623 1624 1625 1626 |
# File 'lib/redis.rb', line 1622 def zrank(key, member) synchronize do |client| client.call([:zrank, key, member]) end end |
#zrem(key, member) ⇒ Boolean, Fixnum
Remove one or more members from a sorted set.
1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 |
# File 'lib/redis.rb', line 1529 def zrem(key, member) synchronize do |client| client.call([:zrem, key, member]) do |reply| if member.is_a? Array # Variadic: return integer reply else # Single argument: return boolean _boolify.call(reply) end end end end |
#zremrangebyrank(key, start, stop) ⇒ Fixnum
Remove all members in a sorted set within the given indexes.
1653 1654 1655 1656 1657 |
# File 'lib/redis.rb', line 1653 def zremrangebyrank(key, start, stop) synchronize do |client| client.call([:zremrangebyrank, key, start, stop]) end end |
#zremrangebyscore(key, min, max) ⇒ Fixnum
Remove all members in a sorted set within the given scores.
1807 1808 1809 1810 1811 |
# File 'lib/redis.rb', line 1807 def zremrangebyscore(key, min, max) synchronize do |client| client.call([:zremrangebyscore, key, min, max]) end end |
#zrevrange(key, start, stop, options = {}) ⇒ Object
Return a range of members in a sorted set, by index, with scores ordered from high to low.
1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 |
# File 'lib/redis.rb', line 1602 def zrevrange(key, start, stop, = {}) args = [] with_scores = [:with_scores] || [:withscores] if with_scores args << "WITHSCORES" block = _floatify_pairs end synchronize do |client| client.call([:zrevrange, key, start, stop] + args, &block) end end |
#zrevrangebylex(key, max, min, options = {}) ⇒ Object
Return a range of members with the same score in a sorted set, by reversed lexicographical ordering. Apart from the reversed ordering, #zrevrangebylex is similar to #zrangebylex.
1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 |
# File 'lib/redis.rb', line 1702 def zrevrangebylex(key, max, min, = {}) args = [] limit = [:limit] args.concat(["LIMIT"] + limit) if limit synchronize do |client| client.call([:zrevrangebylex, key, max, min] + args) end end |
#zrevrangebyscore(key, max, min, options = {}) ⇒ Object
Return a range of members in a sorted set, by score, with scores ordered from high to low.
1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 |
# File 'lib/redis.rb', line 1772 def zrevrangebyscore(key, max, min, = {}) args = [] with_scores = [:with_scores] || [:withscores] if with_scores args << ["WITHSCORES"] block = _floatify_pairs end limit = [:limit] args.concat(["LIMIT"] + limit) if limit synchronize do |client| client.call([:zrevrangebyscore, key, max, min] + args, &block) end end |
#zrevrank(key, member) ⇒ Fixnum
Determine the index of a member in a sorted set, with scores ordered from high to low.
1634 1635 1636 1637 1638 |
# File 'lib/redis.rb', line 1634 def zrevrank(key, member) synchronize do |client| client.call([:zrevrank, key, member]) end end |
#zscan(key, cursor, options = {}) ⇒ String, Array<[String, Float]>
Scan a sorted set
2506 2507 2508 2509 2510 |
# File 'lib/redis.rb', line 2506 def zscan(key, cursor, ={}) _scan(:zscan, cursor, [key], ) do |reply| [reply[0], _floatify_pairs.call(reply[1])] end end |
#zscan_each(key, options = {}, &block) ⇒ Enumerator
Scan a sorted set
2523 2524 2525 2526 2527 2528 2529 2530 2531 |
# File 'lib/redis.rb', line 2523 def zscan_each(key, ={}, &block) return to_enum(:zscan_each, key, ) unless block_given? cursor = 0 loop do cursor, values = zscan(key, cursor, ) values.each(&block) break if cursor == "0" end end |
#zscore(key, member) ⇒ Float
Get the score associated with the given member in a sorted set.
1552 1553 1554 1555 1556 |
# File 'lib/redis.rb', line 1552 def zscore(key, member) synchronize do |client| client.call([:zscore, key, member], &_floatify) end end |
#zunionstore(destination, keys, options = {}) ⇒ Fixnum
Add multiple sorted sets and store the resulting sorted set in a new key.
1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 |
# File 'lib/redis.rb', line 1877 def zunionstore(destination, keys, = {}) args = [] weights = [:weights] args.concat(["WEIGHTS"] + weights) if weights aggregate = [:aggregate] args.concat(["AGGREGATE", aggregate]) if aggregate synchronize do |client| client.call([:zunionstore, destination, keys.size] + keys + args) end end |