Redis的数据应用及扩展之PubSub

369 阅读1分钟

「这是我参与11月更文挑战的6天,活动详情查看:2021最后一次更文挑战

发布订阅之PubSub

image.png

  • 顾名思义发布系统就是围绕接收和发布两个关系
    • 典型的生产者消费者模式
    • 下面我们以消息多播
    1. 首先我们订阅者A先订阅musicA音乐电台A
    2. 其次我们订阅者B再订阅musicAmusicB(音乐电台A和音乐电台B)
    3. 我们再从发布者像电台A和diantaiB去推送消息
  • 1.电台AB

image.png

  • 2.订阅电台AB

image.png

  • 3.发布者推送消息
    • 先往订阅者A和订阅者B同时推送「好运来」这首歌
    • 再往订阅者B同时推送「北京欢迎你」这首歌

image.png

关于持久化

  • 首先redis中的PubSub是不支持持久化的
    • 因为在我们上面的演示中,如果一个订阅者宕机了,剩下另一个订阅者
    • 但是我们的发布者还在一直推送音乐🎵
    • 当宕机到的订阅者恢复的时候是无法接收到之前的消息的
  • 如果两个订阅者都宕机,或者根本没有直连,发布者直接将消息丢掉

image.png

  • 如果进行优化的时候,我们或许可以做一下的行动
    • 首先是可以增加日志(类比MySQL中的三种日志)
    • 这样就能保证如果有订阅者宕机挂掉,再恢复的时候,有一个数据恢复的过程
    • 其次可以做一个缓存队列,每次发布者进行推送数据的时候,都通过缓存队列输送