Redis FIFO 按分数集排序?

Redis FIFO sorted by score set?

我正在实施先进先出队列系统,其中某些玩家根据他们的排名具有更高的优先级。

我目前设计的系统使用zadd,他们的分数是排名优先级。一切正常,因为它会自动按排名优先级对集合进行排序。然后我使用 zpopmin 来获取得分最低的第一个人。它正确地抓住了得分最低的人,但正如您猜到的那样,没有先进先出的优先级。与其他人以相同优先级加入队列的玩家有随机机会进入队列,而不是第一个加入队列的人。

我考虑过使用 https://redis.io/commands#list,但没有按“分数”排序。我觉得如果我每次去检索队列中的第一个人时都必须按他们的排名对整个队列进行排序,并且 lindex 是错误的,因为没有排序。

关于如何处理这样的系统有什么建议吗?

当多个元素得分相同时,redis sorted set按字典顺序排序。但是,如果我正确理解了你的问题,你基本上想按插入时间而不是字典顺序对它们进行排序。如果这是您想要的,您可以将时间戳添加到已排序项目元素的开头,如下所示:

ZADD myzset 1 "1593281577266:useroneid"

ZADD myzset 1 "1593281577467:usertwoid"

如果这是你想要的,请告诉我。