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

tjr*_*ess 2 lua server-side redis

我正在构建一个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"
Run Code Online (Sandbox Code Playgroud)

所以在lua服务器端脚本:

- 这很有效

redis.call('zrem','main', 'two','four')
Run Code Online (Sandbox Code Playgroud)

- 这不是

local temp = redis.call('smembers','remove')    
redis.call('zrem','main', temp )
Run Code Online (Sandbox Code Playgroud)

我尝试过多次迭代我的语法无济于事.有任何想法吗?

我希望避免将"删除"成员转换为某种字符串或循环,并一次删除一个成员.

谢谢

Lin*_*iel 5

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

local temp = redis.call('smembers','remove')    
redis.call('zrem','main', unpack(temp))
Run Code Online (Sandbox Code Playgroud)

unpack 将表"解包"到其成员中.