Java中的Redis队列一次只能执行一个任务

时间:2018-06-21 06:41:47

标签: java redis queue

如何在Java中的Redis中实现队列以一次仅执行一个请求。我已经实现了pub / sub,在其中将请求推送到特定的键,并且该请求花费时间。因此,我想要一个解决方案,在上一个任务未完成之前,将下一个任务添加到队列中,并仅在上一个任务完成后执行

1 个答案:

答案 0 :(得分:0)

这是EVAL的方法。缺点是您不能在此处使用阻止流行音乐。

获取任务

eval "if (redis.call('get','q:lock')=='t') then return {'t',nil} else local task=redis.call('rpop','q') if (task~=false) then redis.call('set','q:lock','t') end return {'f',task} end" 0

它将返回两个值的列表。如果队列已锁定,则第一个为“ t”,否则为“ f”。第二个是任务(如果存在)。

释放锁

set q:lock f