在Redis中,我希望获得不在SortedSet中的分数的天花板分数(和成员)。
在Java中,有NavigableSet我们可以使用E ceiling(E e)来返回此集合中的最小元素大于或等于给定元素,如果没有则返回null这样的元素。
有没有办法在Redis中做同样的事情,可能使用SortedSets或其他数据结构?
由于
答案 0 :(得分:1)
您可以将ZRANGEBYSCORE与Lua脚本一起使用。想象一下以下有序集:
zadd test 1 a
zadd test 2 b
zadd test 4 c
你有3个元素,分数为1,2,4,你想打电话给ceiling(3)
。将以下Lua脚本保存为script.lua
:
local key = KEYS[1]
local givenScore = tonumber(ARGV[1])
local scores = redis.call("ZRANGEBYSCORE", key, givenScore, "+inf", "withscores", "limit", 0, 1)
if (scores == nil or #scores<2) then
return nil
end
return tonumber(scores[2])
并将其命名为:
$ redis-cli eval "$(cat script.lua)" 1 test 3
以下是一些带有上述数据集的示例运行:
$ redis-cli eval "$(cat script.lua)" 1 test 2
(integer) 2
$ redis-cli eval "$(cat script.lua)" 1 test 3
(integer) 4
$ redis-cli eval "$(cat script.lua)" 1 test 4
(nil)