redis在windows下查看工具 Another Redis Desktop Manager

发布订阅有多种实现方式,常用pubsub和stream

1.基于频道(Channel)或模式(Pattern)的发布/订阅

✦ 使用注意

客户端需要及时消费和处理消息。

客户端订阅了channel之后,如果接收消息不及时,可能导致DCS实例消息堆积,当达到消息堆积阈值(默认值为32MB),或者达到某种程度(默认8MB)一段时间(默认为1分钟)后,服务器端会自动断开该客户端连接,避免导致内部内存耗尽。

客户端需要支持重连。

当连接断开之后,客户端需要使用subscribe或者psubscribe重新进行订阅,否则无法继续接收消息。

不建议用于消息可靠性要求高的场景中。

Redis的pubsub不是一种可靠的消息系统。当出现客户端连接退出,或者极端情况下服务端发生主备切换时,未消费的消息会被丢弃。

缺点:

1.消息无法持久化,存在丢失风险

和常规的MQ不同,redis实现的发布/订阅模型消息无法持久化,一经发布,即使没有任何订阅方处理,该条消息就会丢失

2.没有类似ACK的机制

即发布方不会确保订阅方成功接收

3.广播机制,下游消费能力取决于消费方本身

广播机制无法通过添加多个消费方增强消费能力,因为这和发布/订阅模型本身的目的是不符的.广播机制的目的是一个一个发布者被多个订阅进行不同的处理

使用aioredis实现订阅import asyncioimport aioredisfrom pprint import ppasync def main():redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf-8')[channel] = await redis.psubscribe('bigfoot:broadcast:channel:*')while True:message = await channel.get()pp(message)asyncio.run(main())
————————————————https://blog.csdn.net/m0_49079037/article/details/107289103
使用aioredis实现发布import asyncioimport aioredisasync def main():redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf-8')await asyncio.gather(publish(redis, 1, 'Possible vocalizations east of Makanda'),publish(redis, 2, 'Sighting near the Columbia River'),publish(redis, 2, 'Chased by a tall hairy creature'))redis.close()await redis.wait_closed()def publish(redis, channel, message):return redis.publish(f'bigfoot:broadcast:channel:{channel}', message)asyncio.run(main())————————————————
https://blog.csdn.net/m0_49079037/article/details/107289103

2.基于stream的发布订阅

在 2018 年 6 月,Redis 5.0 新增了 Stream 数据结构,这个功能给 Redis 带来了 持久化消息队列

在 xadd 的指令提供一个定长长度 maxlen,就可以将老的消息干掉,确保最多不超过指定长度

在客户端消费者读取 Stream 消息时,Redis 服务器将消息回复给客户端的过程中,客户端突然断开了连接,消息就丢失了。但是 PEL 里已经保存了发出去的消息 ID,待客户端重新连上之后,可以再次收到 PEL 中的消息 ID 列表。不过此时 xreadgroup 的起始消息 ID 不能为参数 > ,而必须是任意有效的消息 ID,一般将参数设为 0-0,表示读取所有的 PEL 消息以及自 last_delivered_id 之后的新消息。

发布import asyncioimport aioredisasync def main():redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf-8')await asyncio.gather(add_to_stream(redis, 1, 'Possible vocalizations east of Makanda', 'Class B'),add_to_stream(redis, 2, 'Sighting near the Columbia River', 'Class A'),add_to_stream(redis, 3, 'Chased by a tall hairy creature', 'Class A'))redis.close()await redis.wait_closed()def add_to_stream(redis, id, title, classification):return redis.xadd('bigfoot:sightings:stream', {'id': id, 'title': title, 'classification': classification })asyncio.run(main())
————————————————
https://blog.csdn.net/m0_49079037/article/details/107289103
消费import asyncioimport aioredisfrom pprint import ppasync def main():redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf8')last_id = '0-0'while True:events = await redis.xread(['bigfoot:sightings:stream'], timeout=0, count=5, latest_ids=[last_id])for key, id, fields in events:pp(fields)last_id = idasyncio.run(main())
————————————————
https://blog.csdn.net/m0_49079037/article/details/107289103

Redis 超越缓存 使用 Python 配合_编程歆妍的博客-CSDN博客  redis其他典型应用

Redis 中的发布/订阅功能_IT瘾君的博客-CSDN博客_redis订阅发布缺点

Redis 基于内存存储,这意味着它会比基于磁盘的 Kafka 快上一些,也意味着使用 Redis 我们 不能长时间存储大量数据。不过如果您想以 最小延迟 实时处理消息的话,您可以考虑 Redis,但是如果 消息很大并且应该重用数据 的话,则应该首先考虑使用 Kafka。

Redis 发布订阅功能相关推荐

  1. Redis 发布订阅,小功能大用处,真没那么废材!

    假设我们有这么一个业务场景,在网站下单支付以后,需要通知库存服务进行发货处理. 上面业务实现不难,我们只要让库存服务提供给相关的给口,下单支付之后只要调用库存服务即可. 后面如果又有新的业务,比如说积 ...

  2. Redis发布订阅机制

    1. 什么是Redis Redis是一个开源的内存数据库,它以键值对的形式存储数据.由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也 ...

  3. 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能...

    springboot+redis实现发布订阅功能,实现redis的消息队列的功能 参考:https://www.cnblogs.com/cx987514451/p/9529611.html 思考一个问 ...

  4. redis的观察者模式----------发布订阅功能

    2019独角兽企业重金招聘Python工程师标准>>> 众所周知,Java,C++等面向对象有一种常见的设计模式:观察者模式,redis这种机制叫做发布订阅功能. 以下假设已redi ...

  5. Spring Boot 2.x基础教程:使用Redis的发布订阅功能

    通过前面一篇集中式缓存的使用教程,我们已经了解了Redis的核心功能:作为K.V存储的高性能缓存. 接下来我们会分几篇来继续讲讲Redis的一些其他强大用法!如果你对此感兴趣,一定要关注收藏我哦! 发 ...

  6. 你还不了解Redis的发布/订阅功能与Redis的Stream吗

    一.Redis 中的发布/订阅功能 发布/ 订阅系统 是 Web 系统中比较常用的一个功能.简单点说就是 发布者发布消息,订阅者接受消息,这有点类似于我们的报纸/ 杂志社之类的: (借用前边的一张图) ...

  7. 【Redis】Redis Jedis实现发布订阅功能

    文章目录 1.概述 1.1 console案例 1.2 原理 2.定义Subscriber类 3.定义SubThread线程类 4.定义Publisher类 5.定义入口代码 1.概述 Redis发布 ...

  8. google的api key调用次数是多少_Sprint Boot如何基于Redis发布订阅实现异步消息系统的同步调用?...

    前言 在很多互联网应用系统中,请求处理异步化是提升系统性能一种常用的手段,而基于消息系统的异步处理由于具备高可靠性.高吞吐量的特点,因而在并发请求量比较高的互联网系统中被广泛应用.与此同时,这种方案也 ...

  9. 使用Spring Redis发布/订阅

    继续发现功能强大的Redis功能集,值得一提的是对发布/订阅消息的开箱即用支持. 发布/订阅消息传递是许多软件体系结构的重要组成部分. 某些软件系统要求消息传递解决方案提供高性能,可伸缩性,队列持久性 ...

最新文章

  1. 基于TensorRT的BERT实时自然语言理解(上)
  2. 当redis执行flush操作后的补救措施
  3. 关键七步,用Apache Spark构建实时分析Dashboard
  4. linux知识点记录二
  5. 查看jvm 默认的垃圾回收器
  6. java算法腐烂橘子,答案——腐烂的橘子算法题目
  7. C语言:对包含10个整数的数组进行如下的操作,从下标为0的元素开始到最后一个元素,依次向前移动一个位置。
  8. 牛客网笔试输入输出的一堆坑。。(Python)
  9. MATLAB | sRGB图像的灰度转换算法
  10. 网易互娱2017实习生招聘在线笔试第一场-1电子数字
  11. 万科的管理层为何要在质疑中坚定地推迟董事会改选?
  12. 四旋翼无人机动力学模型及控制
  13. pycharm终端提示无法加载文件 F:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\activate.ps1,因为在
  14. iphone8引发的AR大事件
  15. 00截断上传绕过_上传绕过总结
  16. 数学四大思想八大方法_四大数学思想
  17. html中diy的背景怎么透明,自制复古几何无缝纹案背景_html/css_WEB-ITnose
  18. 解决谷歌浏览器切后台会停止游戏
  19. Tailwind 初识
  20. VMware(1):MacOS虚拟机无法设置自动调整大小(已解决)

热门文章

  1. 手把手教会搭建网站详细全过程(从域名到网站部署)
  2. 帅某---考研---空间直线绕坐标轴旋转、二次曲面方程
  3. OpenCV中的利用傅里叶梅林变换进行平移旋转图像的比对
  4. 制作本地SCLo-scl镜像仓库(reposync下载rpm包、createrepo制作镜像仓库、httpd发布服务)
  5. 福师《计算机应用基础》在线作业一,福师《计算机应用基础》在线作业一答案...
  6. [增强现实]Unity制作AR增强现实--茶壶(亲测)
  7. android中怎么设置组件在LinearLayout中居中
  8. iVMS-4200 Vs区别_理科与工科有什么区别?如何判断自己适合学那个?
  9. Excel按照单元格内设定好的次序进行工作表排序
  10. OPA1612AIDR IC AUDIO 2 CIRCUIT 8SOIC