redis进阶之实现消息队列发布/订阅模式使用(七)
Redis发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。微信、 微博、关注系统!
Redis 客户端可以订阅任意数量的频道。
订阅/发布消息图:
- 消息发送者,
- 频道
- 消息订阅者
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的 关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户 端:
命令
这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播、实时提醒等
测试
订阅端:
127.0.0.1:6379> SUBSCRIBE kuangshenshuo # 订阅一个频道 kuangshenshuo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "xiaohanne"
3) (integer) 1
# 等待读取推送## 标题的信息
1) "message" # 消息
2) "xiaohanne" # 那个频道的消息
3) "hello,xiaohan
1) "message"
2) "xiaohanne"
3) "hello,redis"
发送端:
127.0.0.1:6379> PUBLISH kuangshenshuo "hello,kuangshen" # 发布者发布消息到频道!
(integer) 1
127.0.0.1:6379> PUBLISH kuangshenshuo "hello,redis" # 发布者发布消息到频道!
(integer) 1
127.0.0.1:6379>
原理
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值上进行了消息发布后,所有订阅它的客户端都会收到相应 的消息。
使用场景:
- 实时消息系统!
- 实时聊天!(频道当做聊天室,将信息回显给所有人即可!)
- 订阅,关注系统都是可以的!这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。
稍微复杂的场景我们就会使用 消息中间件 MQ ()
哈哈,终于总结完啦,如果对小涵的总结有不同的看法,直接评论就好啦!别忘了点波关注、转发哦!
redis进阶之实现消息队列发布/订阅模式使用(七)相关推荐
- Java实现redis消息队列发布/订阅模式
最近在一个老项目中需要用消息队列,本来想着用卡夫卡,但是试了几个版本之后发现jdk和卡夫卡版本一直对不上,最后选择用redis来实现消息队列的发布/订阅模式.感谢这位大佬的博客给了我很多的帮助,htt ...
- 消息队列——发布订阅模式
在 Redis 中提供了专门的类型:Publisher(发布者)和 Subscriber(订阅者)来实现消息队列. 在文章开始之前,先来介绍消息队列中有几个基础概念,以便大家更好的理解本文的内容. 首 ...
- Redis应用实践-使用消息队列发布微博
使用消息队列发布微博 有时候我们的应用中(如:微博)会出现这样的情况,一秒钟有很多用户同时发布消息.这个时候数据库Mysql可能会出现"too many connections". ...
- Redis 高级特性(2)—— 发布 订阅模式
Redis 高级特性 -- 发布订阅 1. 发布-订阅介绍 "发布-订阅"模式包含两种角色,分别为发布者和订阅者.订阅者可以订阅一个或者若干个频道(channel),而发布者可以向 ...
- springboot集成阿里MNS消息队列发布订阅消息功能
声明: 上一篇文章是springboot集成阿里ons发布订阅消息,此篇文章是mns发布订阅功能先简单记录一下ons与mns有什么区别 这里是在网上找的对比图: 此处为具体区别文章链接:点击打开链接 ...
- springboot集成阿里ons消息队列发布订阅消息功能
此处的项目是springboot项目.使用队列的产品是阿里云ons 消息队列 阿里云的ons消息队列是基于rockermq 项目环境.jdk1.8 使用阿里ons开发的api接口实现发布定于功能生产和 ...
- mysql消息队列推送到redis_Redis实现消息队列之发布订阅模式
发布订阅(pub/sub)是一种消息通信模式:发送者(pub)在某一频道发送消息,订阅者(sub)接收消息.发布订阅模式类似与微博关注,比如说博主mango被张三.李四.王五关注,那么mango发一篇 ...
- Spring Boot 使用Redis发布订阅模式处理消息
Spring Boot 使用Redis发布订阅模式 1. Redis发布订阅模式 2. Spring Boot中订阅消息 2.1 Redis监听器容器配置 2.2 创建通道监听器 2.3 测试订阅功能 ...
- Redis实现消息队列和订阅发布模式
转载:https://www.cnblogs.com/qlqwjy/p/9763754.html 在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面 ...
最新文章
- spring Batch实现数据库大数据量读写
- 零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
- python3 RSA 用私钥对随机密钥进行解密
- 为AD用户启用或禁用OCS 2007 R2帐户
- 信息系统项目管理师-论文专题(四)进度管理论文写作
- 利用docker编译Android源码
- 【java设计模式之Command(菜单命令) 】
- [NOI2010]超级钢琴 主席树
- 年轻的工程师如何月入伍万XD
- 【转载】Python线程、进程和协程详解
- Linux系统原理(工作模式)
- 京东排行第一,近 4 万好评,这本 Python 书究竟好在哪?
- centos时间同步
- 异常将上下文初始化事件发送到类的侦听器实例_Java虚拟机从入门到入土之JVM的类加载机制
- 软件测试【个人简历】展示模板
- Java根据isbn查询图书信息_图书ISBN查询
- blk_update_request: I/O error,dev fd0, sector 0
- java脚本引擎parseint方法_autojs脚本引擎调用java的jsoup爬取科学网博客的指定id的好友名字...
- Java 视频转换h265、h264、mkv、mp4
- java 周几_java根据日期获取周几和获取某段时间内周几的日期