美文网首页
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实现阻塞轮训队列

    redis实现队列有数据丢失的风险,在一些不要求高可用的需求里,可以在不引入消息队列的情况下,实现轮训队列。 ja...

  • 并发编程之并发队列

    常见的并发队列有2种:阻塞队列和非阻塞队列。阻塞队列使用锁实现,非阻塞队列使用CAS非阻塞算法实现。这2种队列都是...

  • Redis List

    在 redis 可以把 list 用作 栈、队列、阻塞队列

  • 并发队列-无界非阻塞队列ConcurrentLinkedQueu

    一、 前言 常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一...

  • 多线程之非阻塞队列

    ConcurrentLinkedQueue 相对于阻塞队列加锁实现阻塞,非阻塞队列采用无锁CAS的方式来实现。

  • 阻塞队列--ArrayBlockingQueue

    什么是阻塞队列----阻塞队列概述 ArrayBlockingQueue是一个用数组实现的有界阻塞队列,按先进先出...

  • 线程安全8 - 可阻塞的队列

    队列包含固定长度的队列和不固定长度的队列 什么是阻塞队列,阻塞队列的作用与实际应用,阻塞队列的实现原理 Array...

  • 9.阻塞队列和线程池

    阻塞队列 特性 队列是空的时候,从队列获取元素的操作会被阻塞 队列是满的时候,往队列添加元素的操作会被阻塞 实现 ...

  • 阻塞队列

    原理 当阻塞队列空时,从队列中读取元素操作被阻塞。当阻塞队列满时,从队列中写入元素操作被阻塞。 已经实现的类 Ar...

  • Java集合--非阻塞队列(ConcurrentLinkedQu

    1.0 非阻塞队列 在上篇中,我们讲到了阻塞队列,以及阻塞队列中的几个实现类。 本篇,我们继续对队列进行研究。而今...

网友评论

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

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