在我的Go程序中,我正在使用Redis Sorted Set MyEntries
,它具有三个元素:EntryA
,EntryB
和EntryC
,其排名分别为[[1,2和3(依此类推..)。
不是
使用LIST)。 但是问题是,当排名顺序不再明显时,if
删除了一个元素!例如,如果我删除EntryB
,则EntryC
的排名仍为3(而不是2)。我知道我基本上可以按索引查询,因为索引号确实会动态变化。但不幸的是,我只是发现Redis中无法按元素名称查询索引。 [请您帮我解决这个问题?如果删除了一个元素,Redis中有什么方法可以动态更新排序集中的排名?
PS,我正在构建一个FIFO排队程序,该程序使用户能够
也从队列中删除元素(最旧的将首先离开)。您还想知道队列中的position是什么(这就是我面临此排名更新问题的原因)。
score
来标识排名。 如果用户a
的得分为100
,b
的得分为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
的值排名最高。