如何从列表中弹出并SADD到lua脚本中的另一个

时间:2018-11-07 16:05:05

标签: redis lua

我想在Redis LUA脚本中执行以下操作:

  1. “来源”中的SPOP 1+件商品
  2. 将#1中的SADD元素放入“目标”集中

我正在使用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. 使用传入的参数KEY [3]处理1个以上元素
  2. 确保从POP中返回了0个元素,它不会尝试添加到目标集中。

1 个答案:

答案 0 :(得分:1)

在Redis v5及更高版本中,由于默认情况下迁移到脚本效果复制,因此这应该“正常工作”。

在v4中,您必须在脚本中的任何随机命令之前执行java.lang.InstantiationError

编辑:根据您的编辑和评论,下面是一个示例:

redis.replicate_commands()