我正在实现一个先入先出的队列系统,其中某些玩家根据他们的排名有更高的优先级。
我目前设计的系统使用的是zadd
,他们的分数是排名优先。这一切运作良好,因为在它自动排序的设置,他们的排名优先。然后我用zpopmin
来抓第一个得分最低的人。它正确地抓住了得分最低的人,但你可以猜到,没有先到先出的优先权。以与其他人相同的优先级加入队列的玩家有随机进入队列的机会,而不是先加入队列的人。
我考虑使用https://redis.io/commands#list代替,但没有按“分数”排序。我觉得,如果我使用这种方法,每次我去检索队列中的第一个人时,我都必须按照它们的级别对整个队列进行排序,而lindex
将是错误的,因为没有排序。
对于如何处理这样的系统,有什么建议吗?
发布于 2020-06-27 10:19:39
当多个元素有相同的分数时,红排序集按顺序排列。但是,如果我正确地理解了你的问题,你基本上想要按插入时间来排序,而不是按字典顺序排序。如果这是您想要的,您可以将时间戳添加到排序项元素的开头,如下所示:
ZADD myzset 1 "1593281577266:useroneid"
ZADD myzset 1 "1593281577467:usertwoid"
如果这是你想要的,请告诉我。
https://stackoverflow.com/questions/62613366
复制相似问题