Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 动态更新Redis排序集中元素的列组_Go_Redis_Fifo - Fatal编程技术网

Go 动态更新Redis排序集中元素的列组

Go 动态更新Redis排序集中元素的列组,go,redis,fifo,Go,Redis,Fifo,在我的围棋程序中,我正在使用一个名为MyEntries的Redis排序集,它有三个元素:EntryA、EntryB和EntryC,排名1、2和3(以此类推) 它是有序的,元素是唯一的(这就是为什么我不使用列表的原因) 但是问题是,如果删除了一个元素,那么排名顺序显然不再是这样了!例如,如果我删除EntryB,EntryC仍将排名第3(而不是第2) 我知道我基本上可以按索引进行查询,因为索引编号是动态变化的。但我刚刚发现,不幸的是,在Redis中无法按元素名查询索引 你能帮我解决这个问题吗?如果删

在我的围棋程序中,我正在使用一个名为MyEntries的Redis排序集,它有三个元素:
EntryA
EntryB
EntryC
,排名123(以此类推)

它是有序的,元素是唯一的(这就是为什么我不使用列表的原因)

但是问题是,如果删除了一个元素,那么排名顺序显然不再是这样了!例如,如果我删除
EntryB
EntryC
仍将排名第3(而不是第2)

我知道我基本上可以按索引进行查询,因为索引编号是动态变化的。但我刚刚发现,不幸的是,在Redis中无法按元素名查询索引

你能帮我解决这个问题吗?如果删除一个元素,Redis中是否有任何方法可以动态更新排序集中的排名


PS我正在构建一个FIFO排队程序,使用户也可以从队列中删除元素(除了最老的先离开)。您还想知道您在队列中的位置(这就是我面临排名更新问题的原因)。

您可以输入标识排名的
分数,而不是排名

如果用户
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> zadd mysort 500 q 25 f 350 p
(integer) 3
127.0.0.1:6379> zrevrange mysort 0 -1 withscores
 1) "q"
 2) "500"
 3) "p"
 4) "350"
 5) "c"
 6) "300"
 7) "a"
 8) "100"
 9) "e"
10) "50"
11) "f"
12) "25"
127.0.0.1:6379> zrevrank mysort q
(integer) 0

在这里,您不断地将您的元素添加到带有分数的排序集中,分数越高表示排名越低-当您使用
zrevrank
时,最高分数将为
0
。当您使用
zrem
删除得分最高的元素时,得分第二高的元素将以
0

的值排名最高,您所说的
在Redis中无法按元素名称查询索引是什么意思?你的问题是什么?获取给定元素的排名?所以他们在这里讨论:我在文档中也找不到关于它的任何信息。。(命令参考页)关于
zrank
我正在使用它。但这就引出了我上面描述的问题!如果我删除一个元素会怎么样。。新元素的排名应该改变!我添加了一个可能的解决方案作为答案,包括添加、删除、排名、所有列表等。解决了!谢谢:)