• Redis可以用作消息队列吗?


    消息队列

          所谓的"消息队列"就是:在消息的传输过程中保存消息的容器。上次有朋友面试,面试官就问,redis可以用作消息队列吗?当时一懵。每当想到消息队列:我们都会想到RabbitMQActiveMQ,RocketMQ,等等一些专业的消息中间件。但是如果我们做的事情比较简单业务逻辑不是很复杂,只需要有一个消息队列,使用专业的消息中间件是非常麻烦的,因此我们可以使用Redis做消息队列。

    如果对消息的可靠性没有较高的要求的话,那么就可以使用Redis去实现。

    Redis做消息队列,可以使用List这个数据类型。List里面有两个命令,lpush/rpush操作来实现入队,然后使用lpop/rpop实现出列

    在客户端中,我们会维护一个死循环来不停的从队列中pop读取数据,如果队列中有消息,则直接读取,如果没有,就会陷入死循环,直到下一次有消息进入。这种死循环会造成大量的资源浪费,这个时候我们可以使用,blpop/brpop去处理,相当于lpop的阻塞,当没有消息到来的时候就会休眠,直到消息来临,才唤醒,pop去读取数据。在java中可以使用while循环去实现

    延迟消息队列

          延迟消息队列,可以用zset实现,里面有score分数浮动数值,数据 可以根据core排序,zset可用于高效的检索,我们可以将时间作为score,将value存到redis中,然后通过轮询的方式去读取消息出来,在当前时间的基础上在加5s,就可以实现延迟消息队列。

    首先,如果消息是字符串,直接发送就可以,如果是对象,则需要序列化,实现序列化接口或者使用JSON进行序列化和反序列化。

    步骤一:构造一个消息对象。

    步骤二:封装消息队列,包括消息入队,和消息出列

    步骤三:测试,构造消息队列,构造一个消息生产者,构造一个消息消费者。

    本文转载学习来自:https://www.cnblogs.com/javazl/p/12729462.html

  • 相关阅读:
    JAVA 不同类载入器命名空间的理解
    着手微信企业号的一些尝试
    redis之字符串命令源代码解析(二)
    设计模式学习04—建造者模式
    联合体union用在何处?
    10款jQuery/CSS3动画应用 超有用
    JavaWeb学习笔记:Tomcat
    Directx9.0 学习教程3 -图形学之创建点 线 三角形 等
    hdu 1158 Employment Planning (dp)
    (九十二)加速计的使用方法(过期方法+新方法)
  • 原文地址:https://www.cnblogs.com/zhaosq/p/13208613.html
Copyright © 2020-2023  润新知