Way*_*her 6 concurrency priority-queue redis
我想在 Redis 中实现一个并发优先级队列,不同机器上的多个进程添加项目(带有分数),而多个其他进程则弹出这些项目,分数最低的优先。
简单的队列可以用LPUSH和RPOP来实现。
使用 ZSET,只要只有一个读取器,我就可以使用 ZADD 添加项目并使用 ZRANGE 和 ZREM 弹出它们。
对于多个读者,我认为我需要像 ZPOP 这样的东西,它将 ZRANGE 和 ZREM 结合在一个原子操作中。否则,两个读者可能会在 ZREM 之前从 ZRANGE 获得相同的项目。如果 ZREM 返回 0,则重试可以,但不可取。
有什么办法可以使用当前的 Redis 命令来做到这一点吗?有什么原因没有将其添加到 Redis 中吗?看起来这将是一个非常简单的命令。
如果您使用执行 ZRANGE 和 ZREM 的 Lua 脚本或使用 MULTI/EXEC 块,则可以保证原子性。这将防止多个工作人员相互干扰。
我认为 ZPOP 最初没有被放入,因为它不是一个常见的用例,并且在需要时可以轻松编写脚本。
| 归档时间: |
|
| 查看次数: |
11601 次 |
| 最近记录: |