满堂花醉三千客,一剑霜寒十四洲。这篇文章主要讲述#yyds干货盘点#Redis之Pub/Sub相关的知识,希望能为你提供帮助。
1、简介李子捌把话说在前头,如果你是面试或者为了了解知识来学习这一知识点,我觉得是有必要的;但是如果你是作为公司的技术负责人或者项目技术选型来使用Redis的Pub/Sub做消息的发布订阅,如果你不是走投无路了,那么你可能值得斟酌一下。Redis的Pub/Sub发布订阅,是Redis一步步完善消息队列功能的一个进步点,虽然现在没人用Pub/Sub做消息队列,但是它的思想和功能也是值得玩一下的,这个就是我写这篇文章的主要原因。
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
- pub -> publisher
- sub -> subscriber
如下图,Redis客户端订阅(subscriber)频道(channel)
如下图,当消息发送到客户端订阅的频道(channel)时,这个消息就会被订阅的所有未故障的客户端接接收到
2、实例演示演示Redis的发布订阅,我们需要开启多个客户端,订阅频道(channel)。
2.1 普通订阅
如下我会启动4个客户端,第一个客户端用来发布消息,其他的用来订阅频道,接收消息。
客户端2、客户端3、客户端4同时订阅news和weather频道(channel)
客户端1向频道news/weather发布消息
此时可以看到三个客户端均接收客户端1向频道news/weather发布的消息
2.2 模式订阅
Redis为了方便同时订阅多个模式的频道,也有类似市面上常见的MQ中模式订阅功能(如Rabbit MQ中的topic),这个功能可以匹配符的方式进行订阅。
比如我需要订阅以fund.开头,任意字符结尾的频道,就可以使用如下的订阅方式
尝试向fund.nuoan发布消息
订阅了fund.*的客户端,成功接收到消息
3、Pub/Sub为什么被抛弃关于Redis的Pub/Sub为什么被抛弃,最主要的原因是它无法持久化,没有实现持久化机制的Pub/Sub,无法做到消息的不丢失,在客户端宕机或者Redis服务宕机的情况下,都会导致消息丢失。
- 客户端宕机,客户端无法接收消息
- Redis服务宕机,没有客户端能连接上,肯定也无法接收到消息
大部分情况下,我们都不会用到Redis去做消息中间件,市面上成熟且好用的消息中间件非常多,如果真的需要使用Redis来做消息中间件,可以考虑Redis 5.0的新数据结构Stream,这个功能在Pub/Sub的基础上,实现了持久化机制,并且大力借鉴了kafka的设计原理,完善了Redis用于实现消息队列的不足之处。
【#yyds干货盘点#Redis之Pub/Sub】关于stream的知识点,请查看我的Redis专栏!
推荐阅读
- linux比较两个目录的差异
- SpringCloud升级之路2020.0.x版-44.避免链路信息丢失做的设计
- ES6学习 第六章 数值的扩展
- k8s中imagePullSecrets
- 9000字加图文 | 带你了解IP地址划分子网掩码的作用实际中IP地址规划是怎么样的
- Linux基础之文件系统与日志分析
- 杨辉三角形(开方做法本源)
- Flink 是如何统一批流引擎的
- SecureCRT输入指令后出现中文乱码