我正在实现一个先进先出的队列系统,在这个系统中,某些玩家根据他们的等级拥有更高的优先级。
我现在设计的系统 zadd
他们的分数是最重要的。这一切工作正常,因为在它自动顺序设置的排名优先权。然后我使用 zpopmin
抢第一个得分最低的人。它正确地抓住了得分最低的人,但正如你所猜测的,没有先进先出的优先权。以与其他人相同的优先级加入队列的玩家有随机进入的机会,而不是首先加入队列的人。
我想用https://redis.io/commands#list 但是没有按“分数”排序。我觉得如果我用它,每次我去检索队列中的第一个人时,我就必须按他们的等级对整个队列进行排序,然后 lindex
那就错了,因为没有分类。
关于如何处理这样的系统有什么建议吗?
1条答案
按热度按时间tzdcorbm1#
当多个元素具有相同的分数时,redis排序集按字典顺序排列。但是,如果我对你的问题理解正确的话,你基本上是想按插入时间排序,而不是按字典排序。如果这是您想要的,您可以将时间戳添加到排序项目的元素开头,如下所示:
ZADD myzset 1 "1593281577266:useroneid"
ZADD myzset 1 "1593281577467:usertwoid"
如果这是你想要的,请告诉我。