gpt4 book ai didi

Redis获取分数在最小值和最大值之间的成员

转载 作者:IT王子 更新时间:2023-10-29 06:03:35 26 4
gpt4 key购买 nike

我在 sql 中有一个包含 3 列的表:BIGINT StartNumber、BIGINT EndNumber、BIGINT LocationId,我需要能够执行类似这样的操作

Select LocationId where StartNumber < @number and EndNumber > @number.

例如:

StartNumber EndNumber LocationId
1 5 1
6 9 1
10 16 2

当我有@number = 7 时,我应该得到 LocationId = 1

我如何在 Redis 中执行此操作?

我正在考虑将此表移动到 Redis,使用排序集和 ZRANGEBYSCORE 但它对我不起作用:1)当我使用 ZADD key score member [score] [member] 时,即使使用 nx 参数,我也无法添加具有相同成员和不同分数的 2 个元素:zadd myset nx 1 "17"2 "17" - 它将添加一个元素然后更新其分数,而不是添加两个元素。2)当我添加这个时:zadd set1 2 "a"4 "b"6 "c"10 "d" 然后尝试做 zrangebyscore set1 3 3 (想要获得分数包括的成员3) 我得到空结果

附言所有命令都在redis网站的示例页面上执行。

最佳答案

因此,据我了解任务,您没有重叠,每个间隔仅映射到一个位置(?)并且间隔没有间隙。基于此,您只能使用一个具有下限(或上限)边界值的排序列表:

ZADD StartNumber 1 "1:5:1" 6 "6:9:1" 10 "10:16:2"

然后你可以使用:

ZREVRANGEBYSCORE StartNumber 7 -inf LIMIT 0 1

它将是 O(log(N))。

关于Redis获取分数在最小值和最大值之间的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32185898/

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