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