前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Redis】010-Redis发布订阅

【Redis】010-Redis发布订阅

作者头像
訾博ZiBo
发布2025-01-06 16:06:12
发布2025-01-06 16:06:12
6600
代码可运行
举报
运行总次数:0
代码可运行

一、概述

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。微信、微博、关注系统;

Redis 客户端可以订阅任意数量的频道;

订阅/发布消息图:

第一个:消息发送者;第二个:频道;第三个:消息订阅者;

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时,这个消息就会被发送给订阅它的三个客户端:

二、命令

三、测试

1、启动Redis服务器和客户端,订阅一个频道

2、再开一个客户端,发送消息

3、订阅者自动接收到了消息

4、命令总览

代码语言:javascript
代码运行次数:0
复制
------------订阅端----------------------
127.0.0.1:6379> SUBSCRIBE sakura # 订阅sakura频道
Reading messages... (press Ctrl-C to quit) # 等待接收消息
1) "subscribe" # 订阅成功的消息
2) "sakura"
3) (integer) 1
1) "message" # 接收到来自sakura频道的消息 "hello world"
2) "sakura"
3) "hello world"
1) "message" # 接收到来自sakura频道的消息 "hello i am sakura"
2) "sakura"
3) "hello i am sakura"

--------------消息发布端-------------------
127.0.0.1:6379> PUBLISH sakura "hello world" # 发布消息到sakura频道
(integer) 1
127.0.0.1:6379> PUBLISH sakura "hello i am sakura" # 发布消息
(integer) 1

-----------------查看活跃的频道------------
127.0.0.1:6379> PUBSUB channels
1) "sakura"

四、原理

每个 Redis 服务器进程都维持着一个表示服务器状态的 redis.h/redisServer 结构, 结构的 pubsub_channels 属性是一个字典,这个字典就用于保存订阅频道的信息,其中,字典的键为正在被订阅的频道, 而字典的值则是一个链表, 链表中保存了所有订阅这个频道的客户端;

客户端订阅,就被链接到对应频道的链表的尾部,退订则就是将客户端节点从链表中移除;

五、缺点

1、如果一个客户端订阅了频道,但自己读取消息的速度却不够快的话,那么不断积压的消息会使redis输出缓冲区的体积变得越来越大,这可能使得redis本身的速度变慢,甚至直接崩溃;

2、这和数据传输可靠性有关,如果在订阅方断线,那么他将会丢失所有在短线期间发布者发布的消息;

六、应用

消息订阅:公众号订阅,微博关注等等(起始更多是使用消息队列来进行实现);

多人在线聊天室;

备注:

这边消息队列的功能相比MQ之类的就差很多了,所以稍微复杂的场景,我们就会使用消息中间件MQ处理;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
    • 订阅/发布消息图:
  • 二、命令
  • 三、测试
    • 1、启动Redis服务器和客户端,订阅一个频道
    • 2、再开一个客户端,发送消息
    • 3、订阅者自动接收到了消息
    • 4、命令总览
  • 四、原理
  • 五、缺点
  • 六、应用
    • 备注:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档