Redis服务器端脚本 - 一次性ZREM多个值

我正在构建一个 Redis 服务器端脚本,由于我缺乏对 Lua 的经验,所以有点卡住了。

基本上有一个很大的“主”排序集(包含约1,000个值),我想删除在较小的“移除”集合(包含约100个值)中找到的任何键。类似sdiffstore,但“主”集合中的成员得分很重要。

一个简单的例子:

"main"
ZADD main 6 "one"
ZADD main 7 "two"
ZADD main 8 "three"
ZADD main 9 "four"
ZADD main 10 "five"

"remove"
ZADD remove "two"
ZADD remove "four"

desired output (stored in a sorted set):
6 "one"
8 "three"
10 "five"

所以在lua服务器端脚本中:

  • 这个有效
redis.call('zrem','main', 'two','four')
  • 这个无效
local temp = redis.call('smembers','remove')
redis.call('zrem','main', temp )

我尝试了很多次语法,但都没有成功。有什么想法吗?

我希望避免将“remove”成员转换为某种字符串或循环,然后一次删除一个成员。

谢谢

点赞
用户295262
用户295262

如果我正确理解了您的问题,您应该能够使用 unpack 函数:

local temp = redis.call('smembers','remove')
redis.call('zrem','main', unpack(temp))

unpack 会将表格解包为其成员。

2013-10-11 13:12:56