如何从 Redis 中的 SortedSet 获取上限分数(分数和成员)?

How may I get the ceiling score (score and member) from a SortedSet in Redis?

在 Redis 中,我想获取不在 SortedSet 中的分数的上限分数(和成员)。

在Java中有NavigableSet and we may use E ceiling(E e)为了return这个集合中的最小元素大于或等于给定的元素,如果是null没有这样的元素.

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

谢谢

您可以将 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)