Data structures 如何确定没有正在运行的作业或使用者进程退出

Data structures 如何确定没有正在运行的作业或使用者进程退出,data-structures,redis,Data Structures,Redis,在我们的业务场景中,我们有一个作业队列、一个生产者进程和几个消费者进程。生产者仅在所有消费者都没有作业运行时才将新作业放入队列。消费者可能会死亡或卡住。如果消费者不再工作,生产者应该考虑到这个死去的消费者已经完成了工作。 我们使用redis服务器作为作业队列。如何设计redis数据结构以有效地完成此过程?没有人回答我的问题,但我自己提出了一个解决方案 步骤1。在生产者开始将作业放入队列之前,我设置了一个标志键:set dispatch.finished 0 步骤2。生产者完成将所有作业放入QUU

在我们的业务场景中,我们有一个作业队列、一个生产者进程和几个消费者进程。生产者仅在所有消费者都没有作业运行时才将新作业放入队列。消费者可能会死亡或卡住。如果消费者不再工作,生产者应该考虑到这个死去的消费者已经完成了工作。


我们使用redis服务器作为作业队列。如何设计redis数据结构以有效地完成此过程?

没有人回答我的问题,但我自己提出了一个解决方案

步骤1。在生产者开始将作业放入队列之前,我设置了一个标志键:
set dispatch.finished 0

步骤2。生产者完成将所有作业放入QUU后,更改标志:
SET dispatch.finished 1

步骤3。保留一组工人ID:“SADD工人ID1 ID2”

步骤4。当工作进程获取一些要执行的作业时,它会设置一个标志:
set worker.ID1.busy 1
,并将expire添加到此标志:
expire worker.ID1.busy 3

步骤5。当工作进程发现队列中没有作业,并且
dispatch.finished==1
时,它将更新其忙标志:
SET worker.ID1.busy 0

步骤6。下一个循环,生产者需要检查所有工人忙标志是否为零(或不存在),并且作业队列为空,然后继续步骤1