欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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