美文网首页
redis实现阻塞轮训队列

redis实现阻塞轮训队列

作者: 联想桥南 | 来源:发表于2017-10-01 10:51 被阅读0次

    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

    相关文章

      网友评论

          本文标题:redis实现阻塞轮训队列

          本文链接:https://www.haomeiwen.com/subject/vuwoextx.html