Там нет VARIADIC формы для ZSCORE
, пока - смотрите обсуждение на: https://github.com/antirez/redis/issues/2344
, что сказал, и на некоторое время, что вы могли бы сделать, это использовать скрипт Lua для этого. Например:
local scores = {}
while #ARGV > 0 do
scores[#scores+1] = redis.call('ZSCORE', KEYS[1], table.remove(ARGV, 1))
end
return scores
Запуск из командной строки будет выглядеть следующим образом:
$ redis-cli ZADD foo 1 a 2 b 3 c 4 d
(integer) 4
$ redis-cli --eval mzscore.lua foo , b d
1) "2"
2) "4"
EDIT: В Ruby, вероятно, было бы что-то вроде следующего, хотя бы лучше используя SCRIPT LOAD
и EVALSHA
и загрузка скрипта из внешнего файла (вместо жесткого кодирования его в приложении):
require 'redis'
script = <<LUA
local scores = {}
while #ARGV > 0 do
scores[#scores+1] = redis.call('ZSCORE', KEYS[1], table.remove(ARGV, 1))
end
return scores
LUA
redis = ::Redis.new()
reply = redis.eval(script, ["foo"], ["b", "d"])
Сценарий Lua для получения баллов с идентификаторами участника:
local scores = {}
while #ARGV > 0 do
local member_id = table.remove(ARGV, 1)
local member_score = {}
member_score[1] = member_id
member_score[2] = redis.call('ZSCORE', KEYS[1], member_id)
scores[#scores + 1] = member_score
end
return scores
Рассмотрите возможность использования 'MULTI'. Для 'ZSCORE' нет встроенного множественного доступа. Может быть, указать язык по вашему выбору, чтобы на этот вопрос можно было ответить более конкретно. – woozyking
@woozyking Я использую клиент Ruby. Обновлен вопрос с более подробной информацией. – emaillenin
Вы можете использовать 'MULTI' с Ruby, не так ли? –