动态更新Redis排序集中的元素等级

问题描述 投票:0回答:1

在我的Go程序中,我正在使用Redis Sorted Set MyEntries,它具有三个元素:EntryAEntryBEntryC,其排名分别为[[1,23(依此类推..)。

所有元素都是有序的,并且元素是唯一的(这就是为什么我

不是

使用LIST)。 但是问题是,当排名顺序不再明显时,

if

删除了一个元素!例如,如果我删除EntryB,则EntryC的排名仍为3(而不是2)。我知道我基本上可以按索引查询,因为索引号确实会动态变化。但不幸的是,我只是发现Redis中无法按元素名称查询索引。

[请您帮我解决这个问题?如果删除了一个元素,Redis中有什么方法可以动态更新排序集中的排名?

PS,我正在构建一个FIFO排队程序,该程序使用户能够

也从队列中删除元素(最旧的将首先离开)。您还想知道队列中的position是什么(这就是我面临此排名更新问题的原因)。

go redis fifo
1个回答
0
投票
代替排名,可以放置score来标识排名。

如果用户a的得分为100b的得分为200等。

127.0.0.1:6379> zadd mysort 100 a 200 b 300 c 500 d 50 e (integer) 5 127.0.0.1:6379> zrevrange mysort 0 -1 withscores 1) "d" 2) "500" 3) "c" 4) "300" 5) "b" 6) "200" 7) "a" 8) "100" 9) "e" 10) "50" 127.0.0.1:6379> zrevrank mysort d (integer) 0 127.0.0.1:6379> zrevrank mysort e (integer) 4 127.0.0.1:6379> zrem mysort b (integer) 1 127.0.0.1:6379> zrevrank mysort e (integer) 3 127.0.0.1:6379> zrem mysort d (integer) 1 127.0.0.1:6379> zrevrange mysort 0 -1 withscores 1) "c" 2) "300" 3) "a" 4) "100" 5) "e" 6) "50" 127.0.0.1:6379> zrevrank mysort e (integer) 2 127.0.0.1:6379>

在这里,您将您的元素与他们的分数一起添加到排序集中,分数越高意味着排名越低-使用0时最高分数将是zrevrank。当您用zrem删除得分最高的元素时,得分第二高的元素将以0的值排名最高。
© www.soinside.com 2019 - 2024. All rights reserved.