2

我正在构建一个 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 )

我已经尝试了我的语法的多次迭代,但无济于事。有任何想法吗?

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

谢谢

4

1 回答 1

8

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

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

unpack将把表“解包”到它的成员中。

于 2013-10-11T13:12:56.607 回答