Как SPOP из списка и SADD к другому внутри сценариев lua - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу сделать следующее в сценариях redis LUA:

  1. SPOP 1+ предметов из набора "источник"
  2. элементы SADD из # 1 в «целевой» набор

Я использую Redis 5.

У меня нижеприведенный lua, но это только для одного элемента:

local source = KEYS[1]
local target = KEYS[2]
local num    = KEYS[3]

local ele = redis.call("SPOP", "source")
redis.call("SADD", target, ele)

return "OK"

Как я могу обновить вышеперечисленное с помощью:

  1. обрабатывает 1+ элементов, используя переданный в параметре ключ [3]
  2. убедитесь, что 0 элементов были возвращены из POP, он не пытается добавить к целевому набору.

1 Ответ

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

В Redis v5 и выше это должно "просто работать" из-за перехода к репликации эффектов скрипта по умолчанию.

В v4 вам нужно будет выполнить redis.replicate_commands() перед любой случайной командой в скрипте.

РЕДАКТИРОВАТЬ: за ваши правки и комментарии, вот пример:

-- uncomment the next line for Redis v4
-- redis.replicate_commands()


local source = KEYS[1]
local target = KEYS[2]
local num    = ARGV[1]

local elems = redis.call("SPOP", source, num)
if #elems > 0 then
  redis.call("SADD", target, unpack(elems))
end

return redis.status_reply("OK")  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...