如何在Java中实现ReDIS中的队列,以便一次只执行一个请求。我已经实现了pub/sub,在这里请求被推送到一个特定的密钥,而这个请求需要时间。所以,我想要一个解决方案,在前一个任务未完成之前,将下一个任务添加到队列中,并仅在前一个任务完成后执行
最佳答案
这是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
关于java - Redis在java中排队,一次只执行一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50961957/