java - Redis在java中排队,一次只执行一个任务

标签 java redis queue

如何在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/

相关文章:

database - 使用 JSON 对象作为值对数据库的速度性能有影响吗?

C++:使用高效获取/放置多个元素的队列?

java - 如何从 JTable 单元格中检索数据而不是从表模型中检索数据?

java - 在Java中插入树

java - 无法为JSP tomcat编译类

java - XSLT 转换有时会失败

windows - Redis on windows 安装失败

c# - 已达到 Azure Redis 缓存最大连接数

python - 从优先级队列中删除任意项

java - 为通用队列类创建 toString() 方法时出现逻辑错误