redis中的并发优先级队列?

Way*_*her 6 concurrency priority-queue redis

我想在 Redis 中实现一个并发优先级队列,不同机器上的多个进程添加项目(带有分数),而多个其他进程则弹出这些项目,分数最低的优先。

简单的队列可以用LPUSH和RPOP来实现。

使用 ZSET,只要只有一个读取器,我就可以使用 ZADD 添加项目并使用 ZRANGE 和 ZREM 弹出它们。

对于多个读者,我认为我需要像 ZPOP 这样的东西,它将 ZRANGE 和 ZREM 结合在一个原子操作中。否则,两个读者可能会在 ZREM 之前从 ZRANGE 获得相同的项目。如果 ZREM 返回 0,则重试可以,但不可取。

有什么办法可以使用当前的 Redis 命令来做到这一点吗?有什么原因没有将其添加到 Redis 中吗?看起来这将是一个非常简单的命令。

Ita*_*ber 4

如果您使用执行 ZRANGE 和 ZREM 的 Lua 脚本或使用 MULTI/EXEC 块,则可以保证原子性。这将防止多个工作人员相互干扰。

我认为 ZPOP 最初没有被放入,因为它不是一个常见的用例,并且在需要时可以轻松编写脚本。