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的发布订阅机制包括三个部分,发布者,订阅者和Channel。
发布者和订阅者都是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的发布订阅机制就能满足需求。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步