gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:20:29 25 4
gpt4 key购买 nike

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

在 Java 中,有 NavigableSet我们可以使用 E ceiling(E e)为了返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素则返回 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)

关于redis - 如何从 Redis 中的 SortedSet 获取上限分数(分数和成员)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com