Redis 发布和订阅

目录

 什么是Redis

什么是发布订阅       

Redis 发布订阅架构

如何实现

      命令行实现

       jedis编程实现

  总结

 Redis发布订阅与ActiveMQ的比较

 

                                  Redis发布和订阅

 什么是Redis

        Redis是一个开源的内存数据库,它以键值对的形式存储数据。由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也提供了持久化存储机制,将数据以某种形式保存在文件中,每次重启时,可以自动从文件加载数据到内存当中。 

Redis 发布和订阅

 
        Redis的架构包括两个部分:Redis Client和Redis Server。Redis客户端负责向服务器端发送请求并接受来自服务器端的响应。服务器端负责处理客户端请求,例如,存储数据,修改数据等。 
Redis通常用作数据库,缓存以及消息系统。

什么是发布订阅       

  Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(publish)发送消息,订阅者(subscribe)接收消息。
       发布订阅也叫生产者消费者模式,是实现消息队列的一种方式
            消息队列的三要素
                1、生产者producer
                2、消费者consumer
                3、消息服务broker
            关系图
                Redis 发布和订阅
              

Redis 发布订阅架构

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。

Redis 发布和订阅

发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。
Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

如何实现

      命令行实现

            1.开启4个redis客户端,如上图,3个客户端作为消息订阅者,1个为消息发布者:./redis-cli 
            2.让3个消息订阅者订阅某个频道主题:subscribe channel
                     如果是订阅匹配模式的频道主题:psubscribe chan*  (表示匹配以chan开头的频道主题)
              注意命令是psubscribe,有个p字母

            3.让1个消息发布者向频道主题上发布消息:publish channel message
            4. 然后观察消息的发布和订阅情况

       jedis编程实现

  总结

         发布订阅是消息队列的一种方式,基于消息队列的方式,可以实现系统解耦、削峰填谷,顶住流量洪峰
        redis的主业目前是基于键值对的数据存储、缓存等,消息队列可能是redis的一种尝试,但对redis消息队列以后的发展我们可以保持持续关注。
        常用的流行的消息队列有:ActiveMQ、RabbitMQ等       

 Redis发布订阅与ActiveMQ的比较

(1)ActiveMQ支持多种消息协议,包括AMQP,MQTT,Stomp等,并且支持JMS规范,但Redis没有提供对这些协议的支持; 
(2)ActiveMQ提供持久化功能,但Redis无法对消息持久化存储,一旦消息被发送,如果没有订阅者接收,那么消息就会丢失; 
(3)ActiveMQ提供了消息传输保障,当客户端连接超时或事务回滚等情况发生时,消息会被重新发送给客户端,Redis没有提供消息传输保障。 
总之,ActiveMQ所提供的功能远比Redis发布订阅要复杂,毕竟Redis不是专门做发布订阅的,但是如果系统中已经有了Redis,并且需要基本的发布订阅功能,就没有必要再安装ActiveMQ了,因为可能ActiveMQ提供的功能大部分都用不到,而Redis的发布订阅机制就能满足需求。

 

如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步 

Redis 发布和订阅