zoukankan      html  css  js  c++  java
  • 【Redis】Redis 发布与订阅

    发布订阅中的角色

      1. 发布者(publisher)

          2. 订阅者(subscriber)

        3. 频道(channel)

    消息通信模式

       Redis中发布者和订阅者都是客户端,而频道是沟通它们两之间的桥梁。  发布者将信息发布到频道上,订阅者去订阅该频道后就能收到发布者所发布的消息。这个就是类似于生产者与消费者模型。每个订阅者可以订阅多个频道的,订阅者只接受锁订阅频道的消息,别的频道是不会关心,同时新的订阅者是接受不到频道的历史消息。

      

    Redis发布订阅命令

      1. PUBLISH channel message :将信息发送到指定的频道, 返回订阅者数量。

      2. PSUBSCRIBE pattern [pattern ...] :按照模式订阅一个或多个频道,比如订阅某个字母开头的频道。

      3. UNSUBSCRIBE [channel [channel ...]] : 退订某个频道。

      4. SUBSCRIBE channel [channel ...] :订阅一个或多个频道的信息。

      5. PUBSUB numsub [channel ...] :列出某个频道的订阅者数量。

    Redis消息队列和发布订阅的区别

      1.  发布订阅当发布者发布消息时候其他订阅者都可以接收到消息。而对于消息队列来说是一个抢占的功能,一条消息只能有一个订阅者得到该消息,Redis并没有提供该功能,可以使用List中BRPOP和BLPOP实现阻塞时消息队列。

      2. 使用场景不同,和上面1类似。

    Redis发布订阅注意事项

      1. 如果订阅者断线,是不能接受到发布者所发布的消息,容易丢失数据。

      2. 消息积压,订阅者如果来不及处理发布者所发布的消息,会造成输出缓冲区的体积变得越来越大,导致Redis变慢甚至奔溃。

    Redis发布订阅与ActiveMQ等消息中间件的比较

          1. ActiveMQ支持多种消息协议,包括AMQP,MQTT,Stomp等,并且支持JMS规范,但Redis没有提供对这些协议的支持。

      2. ActiveMQ提供持久化功能,但Redis无法对消息持久化存储,一旦消息被发送,如果没有订阅者接收,那么消息就会丢失。

      3. ActiveMQ提供了消息传输保障,当客户端连接超时或事务回滚等情况发生时,消息会被重新发送给客户端,Redis没有提供消息传输保障。 
       总之,ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的,但是如果系统中已经有了Redis,并且需要基本的发布订阅功能,就没有必要再安装ActiveMQ了,因为可能ActiveMQ提供的功能大部分都用不到,而Redis的发布订阅机制就能满足需求。

    参考来源

      https://blog.csdn.net/u011499747/article/details/51232981

  • 相关阅读:
    HTTP报文语法/HTTP组成
    get和post的区别
    Jmeter图形结果
    Jmeter用表格查看结果
    Jmeter聚合报告
    Jmeter查看结果树
    Jmeter集合点
    Jmeter-BeanShell Sampler调用java代码
    Jmeter简单的接口测试
    get、post接口测试-java
  • 原文地址:https://www.cnblogs.com/songgj/p/9372583.html
Copyright © 2011-2022 走看看