Хотя 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
команда .