Redis基础之发布订阅(四)
2023-09-11 14:19:37 时间
Redis 发布订阅
Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(频道)。
消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的一种解耦方式。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
常用命令
命令 | 说明 |
---|---|
PSUBSCRIBE pattern [pattern ...] | 订阅一个或多个符合指定模式的频道。 |
PUBSUB subcommand [argument [argument ...]] | 查看发布/订阅系统状态,可选参数 1) channel 返回在线状态的频道。 2) numpat 返回指定模式的订阅者数量。 3) numsub 返回指定频道的订阅者数量。 |
PUBSUB subcommand [argument [argument ...]] | 将信息发送到指定的频道。 |
PUNSUBSCRIBE [pattern [pattern ...]] | 退订所有指定模式的频道。 |
SUBSCRIBE channel [channel ...] | 订阅一个或者多个频道的消息。 |
UNSUBSCRIBE [channel [channel ...]] | 退订指定的频道。 |
例子
订阅者 在 redis-cli ,订阅频道
E:\java\Redis-x64-5.0.9>redis-cli 127.0.0.1:6379> subscribe channle1 #客户端订阅频道 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "channle1" 3) (integer) 1
发布者 在redis-cli ,指定频道,发布消息
E:\java\Redis-x64-5.0.9>redis-cli 127.0.0.1:6379> publish channle1 hi,redis #发布者发布消息 (integer) 2 127.0.0.1:6379>
发布订阅与消息队列的异同:
发布订阅:公众号的推送,大家都不陌生,有三个主体发布者,频道(即公众号),订阅者;它主要体现的是发布者发布的消息,要主动推送给订阅者,订阅者是被动接收的。
消息列队:也是三个主体,消息产生者,队列,队列消费者,比如购买东西付款后,系统需要减库存,给你发邮件或短信,减账户金额等,这些操作按照web同步方式,用户需要等待很久,像这种耗时任务,加入队列让后台处理,就极大提升了用户体验。 这种主要体现,产生的队列消息,要让消费程序主动处理。(在这个购买例子中,用户的购买行为就是消息生产者,加入队列中(数据库,redis等),服务器中消费程序就是队列消费者).
http://c.biancheng.net/redis/pubsub.html
相关文章
- redis实战笔记(5)-第5章 使用 Redis构建支持程序
- 各种redis的介绍:ServiceStack.Redis,StackExchange.Redis,CSRedis
- redis基础之开机自启动和监听(二)
- SpringBoot整合Redis
- 110分布式电商项目 - Redis集群(主从复制)
- 安装redis集群报错
- Redis开发 - 1. 认识redis
- Redis不同数据类型下的基础查询命令
- redis 客户端
- 《Redis入门指南(第2版)》一3.1 热身
- windows下使用redis,Redis入门使用,Redis基础命令
- 【Python 八股文】- Redis基础
- Redis基础之常用命令说明(二)
- Redis学习---基础学习[all]
- Redis一年降价6成,阿里云已成国内云计算价格杀手?
- Python使用Redis
- (18)python操作redis
- Redis(1.1)redis安装,linux下安装redis
- 曹工说Redis源码(6)-- redis server 主循环大体流程解析
- 曹工说Redis源码(4)-- 通过redis server源码来理解 listen 函数中的 backlog 参数
- redis实现mysql的数据缓存