在我的围棋程序中,我使用的是一个redis排序集,叫做 MyEntries
它有三个要素: EntryA
, EntryB
以及 EntryC
排名1、2和3(以此类推)。
它是有序的,元素是唯一的(这就是为什么我不使用列表)。
但问题是,如果删除一个元素,那么排名顺序显然就不再是这样了!例如,如果我删除 EntryB
, EntryC
仍然排名第三(而不是第二)。
我知道我基本上可以按索引进行查询,因为索引号是动态变化的。但我刚刚发现,不幸的是,在redis中没有办法按元素名查询索引。
你能帮我解决这个问题吗?在redis中,如果删除一个元素,有没有办法动态更新排序集中的排名?
ps我正在构建一个fifo队列程序,它允许用户从队列中删除元素(除了最老的元素先离开)。您还想知道您在队列中的位置(这就是为什么我面临这个排名更新问题)。
1条答案
按热度按时间iq3niunx1#
你可以把
score
确定排名。如果用户
a
得分为100
,b
有分数200
等。。在这里,你不断地将你的元素添加到他们的分数排序集中,分数越高意味着排名越低-最高的分数将是
0
当你使用zrevrank
. 删除得分最高的元素时zrem
然后得分第二高的元素将以0
.