我怎样才能从Redis的SortedSet中获得天花板得分(分数和成员)?

时间:2016-05-03 09:41:08

标签: redis sortedset

在Redis中,我希望获得不在SortedSet中的分数的天花板分数(和成员)。

在Java中,有NavigableSet我们可以使用E ceiling(E e)返回此集合中的最小元素大于或等于给定元素,如果没有则返回null这样的元素

有没有办法在Redis中做同样的事情,可能使用SortedSets或其他数据结构?

由于

1 个答案:

答案 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)