Redis的发布和订阅
Redis的发布和订阅
我感觉这个发布和订阅用的观察者模式实现的,我只是提一个我的感觉。
Redis 发布订阅 (pub/sub) 是一种消息通信模式
:发送者 (pub)
发送消息,订阅者
(sub) 接收消息。
具体流程如下:
一个频道可以被多个订阅者进行关注。
发布者发布消息后会被订阅者接收
具体操作的命令如下:
测试
首先需要关注一个频道,他就可以一直监听频道的状态
127.0.0.1:6377> SUBSCRIBE myTest
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "myTest"
3) (integer) 1
# 接收消息
1) "message"
2) "myTest" #频道名称
3) "\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88" # 发布的内容
1) "message"
2) "myTest"
3) "123123"
1) "message"
2) "myTest"
3) "xiaoce"
使用PUBLISH 频道 内容
命令发布内容
127.0.0.1:6377> PUBLISH myTest "哈哈哈" #给指定频道发布消息
(integer) 1
127.0.0.1:6377> publish myTest 123123
(integer) 1
127.0.0.1:6377> publish myTest xiaoce
(integer) 1
原理:
Redis是使用C实现的,通过分析Redis源码里的pubsub.c文件,了解发布和订阅机制的底层实现,籍此加深对Redis的理解。
Redis通过PUBLISH、SUBSCRIBE 和PSUBSCRIBE等命令实现发布和订阅功能。
通过SUBSCRIBE命令订阅某频道后, redis server里维护了一个字典,字典的键就是一个个频道 , 而字典的值则是一个链表,链表中保存了所有订阅这个channel的客户端。SUBSCRIBE 命令的关键.就是将客户端添加到给定channel的订阅链表中。
通过PUBLISH命令向订阅者发送消息,redis server会使用给定的频道作为键,在它所维护的channel字典中查找记录了订阅这个频道的所有客户端的链表,遍历这个链表,将消息发布给所有订阅者。
Pub/Sub从字面上理解就是发布( Publish)与订阅( Subscribe ) , 在Redis中,你可以设定对某- -个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。
使用场景:
- 实时消息系统
- 实时聊天频道当做聊天室
- 订阅关注系统都是可以的
稍微复杂的场景我们会使用消息中间件,MQ、kafka