【发布时间】:2014-10-14 20:00:48
【问题描述】:
我想在 Redis 中实现一个并发优先级队列,不同机器上的多个进程添加项目(带有分数)和多个其他进程弹出这些项目,最低分数优先。
可以使用 LPUSH 和 RPOP 实现一个简单的队列。
使用 ZSET,只要只有一个阅读器,我就可以使用 ZADD 添加项目并使用 ZRANGE 和 ZREM 弹出它们。
对于多个读者,我认为我需要像 ZPOP 这样的东西,它将 ZRANGE 和 ZREM 结合在一个原子操作中。否则,两个读者可能在 ZREM 之前从 ZRANGE 获得相同的项目。如果 ZREM 返回 0 则重试可以,但不可取。
有没有什么方法可以使用当前的 Redis 命令来做到这一点?是否有任何理由尚未将其添加到 Redis 中?看起来这将是一个非常简单的命令来实现。
【问题讨论】:
标签: concurrency redis priority-queue