数据库
首页 > 数据库> > Redis的发布和订阅

Redis的发布和订阅

作者:互联网

Redis的发布和订阅

我感觉这个发布和订阅用的观察者模式实现的,我只是提一个我的感觉。

Redis 发布订阅 (pub/sub) 是一种消息通信模式发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

具体流程如下:

image

一个频道可以被多个订阅者进行关注。

image

发布者发布消息后会被订阅者接收

image

具体操作的命令如下:

image

测试

首先需要关注一个频道,他就可以一直监听频道的状态

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值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。

使用场景:

  1. 实时消息系统
  2. 实时聊天频道当做聊天室
  3. 订阅关注系统都是可以的

稍微复杂的场景我们会使用消息中间件,MQ、kafka

标签:订阅,频道,myTest,Redis,发布,消息
来源: https://www.cnblogs.com/echo-7s/p/16441684.html