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进阶之实现消息队列发布/订阅模式使用(七)相关推荐

  1. Java实现redis消息队列发布/订阅模式

    最近在一个老项目中需要用消息队列,本来想着用卡夫卡,但是试了几个版本之后发现jdk和卡夫卡版本一直对不上,最后选择用redis来实现消息队列的发布/订阅模式.感谢这位大佬的博客给了我很多的帮助,htt ...

  2. 消息队列——发布订阅模式

    在 Redis 中提供了专门的类型:Publisher(发布者)和 Subscriber(订阅者)来实现消息队列. 在文章开始之前,先来介绍消息队列中有几个基础概念,以便大家更好的理解本文的内容. 首 ...

  3. Redis应用实践-使用消息队列发布微博

    使用消息队列发布微博 有时候我们的应用中(如:微博)会出现这样的情况,一秒钟有很多用户同时发布消息.这个时候数据库Mysql可能会出现"too many connections". ...

  4. Redis 高级特性(2)—— 发布 订阅模式

    Redis 高级特性 -- 发布订阅 1. 发布-订阅介绍 "发布-订阅"模式包含两种角色,分别为发布者和订阅者.订阅者可以订阅一个或者若干个频道(channel),而发布者可以向 ...

  5. springboot集成阿里MNS消息队列发布订阅消息功能

    声明: 上一篇文章是springboot集成阿里ons发布订阅消息,此篇文章是mns发布订阅功能先简单记录一下ons与mns有什么区别 这里是在网上找的对比图: 此处为具体区别文章链接:点击打开链接 ...

  6. springboot集成阿里ons消息队列发布订阅消息功能

    此处的项目是springboot项目.使用队列的产品是阿里云ons 消息队列 阿里云的ons消息队列是基于rockermq 项目环境.jdk1.8 使用阿里ons开发的api接口实现发布定于功能生产和 ...

  7. mysql消息队列推送到redis_Redis实现消息队列之发布订阅模式

    发布订阅(pub/sub)是一种消息通信模式:发送者(pub)在某一频道发送消息,订阅者(sub)接收消息.发布订阅模式类似与微博关注,比如说博主mango被张三.李四.王五关注,那么mango发一篇 ...

  8. Spring Boot 使用Redis发布订阅模式处理消息

    Spring Boot 使用Redis发布订阅模式 1. Redis发布订阅模式 2. Spring Boot中订阅消息 2.1 Redis监听器容器配置 2.2 创建通道监听器 2.3 测试订阅功能 ...

  9. Redis实现消息队列和订阅发布模式

    转载:https://www.cnblogs.com/qlqwjy/p/9763754.html 在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面 ...

最新文章

  1. spring Batch实现数据库大数据量读写
  2. 零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
  3. python3 RSA 用私钥对随机密钥进行解密
  4. 为AD用户启用或禁用OCS 2007 R2帐户
  5. 信息系统项目管理师-论文专题(四)进度管理论文写作
  6. 利用docker编译Android源码
  7. 【java设计模式之Command(菜单命令) 】
  8. [NOI2010]超级钢琴 主席树
  9. 年轻的工程师如何月入伍万XD
  10. 【转载】Python线程、进程和协程详解
  11. Linux系统原理(工作模式)
  12. 京东排行第一,近 4 万好评,这本 Python 书究竟好在哪?
  13. centos时间同步
  14. 异常将上下文初始化事件发送到类的侦听器实例_Java虚拟机从入门到入土之JVM的类加载机制
  15. 软件测试【个人简历】展示模板
  16. Java根据isbn查询图书信息_图书ISBN查询
  17. blk_update_request: I/O error,dev fd0, sector 0
  18. java脚本引擎parseint方法_autojs脚本引擎调用java的jsoup爬取科学网博客的指定id的好友名字...
  19. Java 视频转换h265、h264、mkv、mp4
  20. java 周几_java根据日期获取周几和获取某段时间内周几的日期

热门文章

  1. oracle不定列,oracle行转列
  2. php注释的作用是什么?
  3. lcs串 java,lcs
  4. 墨者学院-access数据库
  5. python中如何表示非_如何在Python中显示非ASCII字符?
  6. JaveEE UDP 与 TCP 原理
  7. 计算机网络协议的概念
  8. 【JavaScript-事件②】表单元素的属性操作,密码显示隐藏的实现
  9. Exynos4412——SD卡启动
  10. Word Embedding 学习笔记