Redis - Как сохранить результат запроса Zrange как другой упорядоченный набор - PullRequest
0 голосов
/ 21 ноября 2018

Например, я создаю отсортированный набор с помощью этой команды:

zadd key1 1 u1 2 u2 3 u3

Теперь я запрашиваю последние 2 элемента и сохраняю их под другим ключом, скажем key2.Я знаю, что мне нужно сделать запрос следующим образом:

zrange key1 -2 -1

, но я не знаю, как сохранить результат с key2.Извините за вопрос нуб, я новичок в Redis, всего 2 часа :)

1 Ответ

0 голосов
/ 21 ноября 2018

Хотя Redis не имеет встроенной команды для этого, вы можете легко и безопасно уйти с помощью скрипта Lua.Это немного сложнее, потому что ответ от ZRANGE нуждается в обмене между парами счет-членов, которые будут использоваться в качестве входных данных для ZADD.

local src, dst = KEYS[1], KEYS[2]
local from, to = ARGV[1], ARGV[2]

local payload = redis.call('ZRANGE', src, from, to, 'WITHSCORES')

for i = 1, #payload/2 do
  payload[2*i-1], payload[2*i] = payload[2*i], payload[2*i-1]
end

return redis.call('ZADD', dst, unpack(payload))

Подробнее о том, как использовать Lua в Redis, см.EVAL команда .

...