我在Redis中得到了几个带有公共前缀(itemmovements:
)的排序集。
我知道我们可以使用ZCOUNT来获取单个(有序集)键的项目数量,如下所示:
127.0.0.1:6379> zcount itemmovements:8 0 1000000000
(integer) 23
(我能够这样做,因为我知道项目分数的范围。)
如何在循环中为所有以itemmovements:
为前缀的键?
从How to atomically delete keys matching a pattern using Redis获取提示我尝试了这个:
127.0.0.1:6379> EVAL "return redis.call('zcount', unpack(redis.call('keys', ARGV[1])), 0, 1000000000)" 0 itemmovements:*
(integer) 150
但是你可以看到它只返回一个数字(恰好是itemmovements:0
的大小,keys
返回的第一个值。)
答案 0 :(得分:0)
我意识到我不明白EVAL中的lua代码在做什么。下面的代码工作正常:
eval "local a = {}; for _,k in ipairs(redis.call('keys', 'itemmovements:*')) do table.insert(a, k); table.insert(a, redis.call('zcount', k, 0, 1000000000)); end; return a" 0