Concurrency redis中的并发优先级队列?
我想在Redis中实现一个并发优先级队列,不同机器上的多个进程添加项目(有分数),多个其他进程弹出这些项目,分数最低的优先 可以使用LPUSH和RPOP实现简单队列 使用ZSET,我可以使用ZADD添加项目,并使用ZRANGE和ZREM弹出它们,只要只有一个阅读器 对于多个读者,我想我需要类似ZPOP的东西,它将ZRANGE和ZREM结合在一个原子操作中。否则,两个读卡器可能会先从ZRANGE获取相同的项目,然后才能对其进行ZREM。如果ZREM返回0,则重试将有效,但不可取Concurrency redis中的并发优先级队列?,concurrency,redis,priority-queue,Concurrency,Redis,Priority Queue,我想在Redis中实现一个并发优先级队列,不同机器上的多个进程添加项目(有分数),多个其他进程弹出这些项目,分数最低的优先 可以使用LPUSH和RPOP实现简单队列 使用ZSET,我可以使用ZADD添加项目,并使用ZRANGE和ZREM弹出它们,只要只有一个阅读器 对于多个读者,我想我需要类似ZPOP的东西,它将ZRANGE和ZREM结合在一个原子操作中。否则,两个读卡器可能会先从ZRANGE获取相同的项目,然后才能对其进行ZREM。如果ZREM返回0,则重试将有效,但不可取 使用当前的Redi
使用当前的Redis命令有什么方法可以做到这一点吗?有没有什么原因没有将其添加到Redis中?这似乎是一个非常容易实现的命令。如果使用执行ZRANGE&ZREM或MULTI/EXEC块的Lua脚本,则可以保证原子性。这将防止多个工人相互干扰
我假设ZPOP并没有放在第一位,因为它不是一个常见的用例,并且在需要时,它可以很容易地编写脚本。您可以使用redis命令:watch
WATCH zset
element = ZRANGE zset 0 0
MULTI
ZREM zset element
EXEC
如果exec失败(返回空应答),只需重复这些命令。从Redis 5.0.0中,您可以使用and(以及它们的阻塞对应项and)。如何执行此命令?我在文档中看到了它,但我不知道如何执行它