module Generic
Provides generic Redis commands for cluster environments. These methods distribute operations across cluster nodes based on key slots.
Definitions
def del(*keys, role: :master, **options)
Delete one or more keys from the cluster. Uses the appropriate client(s) for each key's slot.
Signature
-
parameter
keysArray(String) The keys to delete.
-
parameter
roleSymbol The role of node to use (
:masteror:slave).-
parameter
optionsHash Additional options passed to the client.
-
returns
Integer The number of keys deleted.
Implementation
def del(*keys, role: :master, **options)
return 0 if keys.empty?
count = 0
clients_for(*keys, role: role) do |client, grouped_keys|
count += client.call("DEL", *grouped_keys)
end
return count
end
def exists(*keys, role: :master, **options)
Check existence of one or more keys in the cluster.
Signature
-
parameter
keysArray(String) The keys to check.
-
parameter
roleSymbol The role of node to use (
:masteror:slave).-
parameter
optionsHash Additional options passed to the client.
-
returns
Integer The number of keys existing.
Implementation
def exists(*keys, role: :master, **options)
return 0 if keys.empty?
count = 0
clients_for(*keys, role: role) do |client, grouped_keys|
count += client.call("EXISTS", *grouped_keys)
end
return count
end
def mget(*keys, role: :master, **options)
Get the values of multiple keys from the cluster.
Signature
-
parameter
keysArray(String) The keys to fetch.
-
parameter
roleSymbol The role of node to use (
:masteror:slave).-
parameter
optionsHash Additional options passed to the client.
-
returns
Array The values for the given keys, in order.
Implementation
def mget(*keys, role: :master, **options)
return [] if keys.empty?
results = Array.new(keys.size)
key_to_index = keys.each_with_index.to_h
clients_for(*keys, role: role) do |client, grouped_keys|
values = client.call("MGET", *grouped_keys)
grouped_keys.each_with_index do |key, i|
results[key_to_index[key]] = values[i]
end
end
return results
end
def get(key, role: :master, **options)
Get the value of a single key from the cluster.
Signature
-
parameter
keyString The key to fetch.
-
parameter
roleSymbol The role of node to use (
:masteror:slave).-
parameter
optionsHash Additional options passed to the client.
-
returns
Object The value for the given key.
Implementation
def get(key, role: :master, **options)
slot = slot_for(key)
client = client_for(slot, role)
return client.call("GET", key)
end
def set(key, value, role: :master, **options)
Set the value of a single key in the cluster.
Signature
-
parameter
keyString The key to set.
-
parameter
valueObject The value to set.
-
parameter
roleSymbol The role of node to use (
:masteror:slave).-
parameter
optionsHash Additional options passed to the client.
-
returns
String | Boolean Status reply or
true/falsedepending on client implementation.
Implementation
def set(key, value, role: :master, **options)
slot = slot_for(key)
client = client_for(slot, role)
return client.call("SET", key, value)
end