redis实现阻塞轮训队列

来源:互联网 发布:先导爱知 编辑:程序博客网 时间:2024/06/05 01:57

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



原创粉丝点击