redis实现阻塞轮训队列
程序员文章站
2022-07-05 10:35:53
...
redis实现队列有数据丢失的风险,在一些不要求高可用的需求里,可以在不引入消息队列的情况下,实现轮训队列。
java客户端实现代码
起个轮训线程
@Override
public void run() {
while (true) {
Jedis jedis = RedisUtil.getJedis();
try {
//阻塞队列,1小时没有数据释放连接
List<String> result = jedis.blpop(60 * 60 * 1, Constants.QUERY_REPLENISH_ORDER_KEY);
if (result != null && result.size() > 1) {
String key = result.get(0);
//todo something
}
} catch (Exception e) {
LogUtil.error(e, "realTime replenish order exception");
} finally {
jedis.close();
}
}
}
使用的是blpop指令,第二个参数是队列的key值,只要队列有数据,一直消费。如果没有数据,就阻塞等待数据的到来;第一个参数是等待时间,超过这个等待时间,就释放阻塞。
参考redis api文档
http://redisdoc.com/list/blpop.html
上一篇: Windows线程同步【2】临界区
下一篇: Elasticsearch安装