当前位置:网站首页>Redis 】 【 publish and subscribe message
Redis 】 【 publish and subscribe message
2022-07-31 13:48:00 【icy hope】
1.说明
在Redis2The publish-subscribe function is supported after the version,The publisher creates a channel,and send a message on it,All clients subscribed to the channel will receive the message(不出意外的情况下,但实际不一定),The benefit of publish subscribe is to reduce unnecessary polling,The application scenario has an instant chat room、Public account subscription, etc.但Redis适合小型应用,If it is a large architecture,I believe it will still be usedrabbitMQ或者kafkaWait for more professionalMQqueue software.
Redis-server内部会维护一个字典,键是频道名,The value is a linked list that stores subscribers,Every time a message is published, the linked list is traversed for push.
2.订阅发布
我们打开一个redis终端,使用subscribe命令订阅频道,You may wish to open several terminals and subscribe to the same channel at the same time,For example, I open two terminals here and subscribe to itchatChannel的频道
# 订阅格式:subscribe 频道名
127.0.0.1:6379> subscribe chatChannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatChannel"
3) (integer) 1
再打开一个终端,使用publish命令发布消息,In this way, the terminal that subscribes to the channel will print the result
# 发布格式:publish 频道名 消息
127.0.0.1:6379> publish chatChannel "hello"
(integer) 2
结果如下图
Each client can subscribe to multiple channels at the same time,即subscribeThe parameter specifies multiple channels,另外也可以使用psubscribeCommand to subscribe to multiple channels(Seems to be called a pattern),支持正则表达式
# 同时订阅 频道1、频道2、频道3
subscribe 频道1 频道2 频道3
# 订阅所有以“chat”开头的频道
psubscribe chat*
You can use it if you want to unsubscribeunsubscribe和punsubscribe命令,Usage is a command followed by a channel or matching pattern
3.代码实现
订阅消息,比如说订阅3Unsubscribe after that
from redis import Redis
r = Redis(host='localhost', port=6379, db=0)
p = r.pubsub() # If you don't want to receive some other information, you can put the parameterignore_subscribe_messages改为True
p.subscribe("testChannel") # If you want to subscribe to multiple channels at the same time,可以传入多个参数
# p.psubscribe("test*") # 模式匹配
i = 0
while True:
msg = p.get_message()
if msg:
print("来电了: ", msg)
i += 1
if i > 2:
break
# 取消订阅
p.unsubscribe()
# p.punsubscribe()
p.close()
r.close()
Posting a message is relatively simple
from redis import Redis
r = Redis(host='localhost', port=6379, db=0)
r.publish('testChannel', 'hello everybody')
r.close()
边栏推荐
- 技能大赛训练题:ftp 服务攻防与加固
- A detailed explanation of the usage of Async and Await in C#
- 4.爬虫之Scrapy框架2数据解析&配置参数&数据持久化&提高Scrapy效率
- C#使用NumericUpDown控件
- C#高级--委托
- 使用NVM进行node版本切换管理
- [Blue Bridge Cup Trial Question 46] Scratch Magnet Game Children's Programming Scratch Blue Bridge Cup Trial Question Explanation
- JSP中如何借助response对象实现页面跳转呢?
- pytorch gpu版本安装最新
- 浏览器被hao360劫持解决办法
猜你喜欢
随机推荐
The use of C# control CheckBox
报错:npm ERR code EPERM
C#使用NumericUpDown控件
ADS与C#通信
Edge Cloud Explained in Simple Depth | 4. Lifecycle Management
C# using NumericUpDown control
1小时直播招募令:行业大咖干货分享,企业报名开启丨量子位·视点
技能大赛训练题:交换机虚拟化练习
MySQL玩到这种程度,难怪大厂抢着要!
C#Assembly的使用
Shell脚本经典案例:文件的备份
最新完整代码:使用word2vec预训练模型进行增量训练(两种保存方式对应的两种加载方式)适用gensim各种版本
The Selenium IDE of the Selenium test automation
C#控件CheckBox的使用
Shell项目实战1.系统性能分析
mysql8, starttime的下一个值作为endtime的上一个值?
C# control ToolStripProgressBar usage
技能大赛训练题:域用户和组织单元的创建
「面经分享」西北大学 | 字节 生活服务 | 一面二面三面 HR 面
LeetCode旋转数组








