gpt4 book ai didi

sorting - Redis:获取相对于Sorted Set中给定元素的前n个元素

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

我在 Redis 中有一个 Sorted Set,它按分数存储我的数据,到目前为止一切正常。

分数是时间序列,数据是字符串Id。我想要的是获取相对于按时间排序的给定元素的前 3 个元素。

例如,我的排序集 "ids_by_time" 包含这些数据(按反向分数排序):

50000 "rev75" 
49055 "rev95"
49050 "rev25"
49025 "rev11"
49015 "rev500"
49000 "rev1"
48105 "rev22"
48000 "rev300"
47999 "rev74"
47345 "rev33"
47255 "rev11"
46288 "rev5"

是否有可能通过此查询获得 Redis Sorted Set 以获取 "rev1" 顺序中的前 3 个?在这种情况下,结果将是 "rev22"、"rev300"和 "rev74" 按此顺序(相反)?

最佳答案

要完成上述任务,您首先需要知道“给定元素”的等级 - 这很容易通过 ZREVRANK 获得命令。然后,使用回复计算相关元素范围的排名,并通过 ZREVRANGE 获得。 ,即如果排名是 n,您需要为接下来的 3 个元素使用 n+1n+3 的范围.像这样:

127.0.0.1:6379> ZREVRANGE ids_by_time 0 -1
1) "rev75"
2) "rev95"
3) "rev25"
4) "rev500"
5) "rev1"
6) "rev22"
7) "rev300"
8) "rev74"
9) "rev33"
10) "rev11"
11) "rev5"
127.0.0.1:6379> ZREVRANK ids_by_time rev1
(integer) 4
127.0.0.1:6379> ZREVRANGE ids_by_time 5 7
1) "rev22"
2) "rev300"
3) "rev74"

您始终可以将其包装在 Lua 脚本中,以确保原子性和最小网络流量。例如:

~$ cat script.lua 
local rank = redis.call('ZREVRANK', KEYS[1], ARGV[1])
return redis.call('ZREVRANGE', KEYS[1], rank+1, rank+tonumber(ARGV[2]))
~$ redis-cli --eval script.lua ids_by_time , rev1 3
1) "rev22"
2) "rev300"
3) "rev74"

关于sorting - Redis:获取相对于Sorted Set中给定元素的前n个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42511444/

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