zoukankan      html  css  js  c++  java
  • Redis-发布订阅模式

    1.1 列表的局限

      前面我们说通过队列的 rpush 和 lpop 可以实现消息队列(队尾进队头出),但是消费者需要不停地调用 lpop 查看 List 中是否有等待处理的消息(比如写一个 while 循环)。
    为了减少通信的消耗,可以 sleep()一段时间再消费,但是会有两个问题:
    1、如果生产者生产消息的速度远大于消费者消费消息的速度,List 会占用大量的内存。
    2、消息的实时性降低。
    list 还提供了一个阻塞的命令:blpop,没有任何元素可以弹出的时候,连接会被阻塞。
    blpop queue 5
      基于 list 实现的消息队列,不支持一对多的消息分发。

    1.2 发布订阅模式

      除了通过 list 实现消息队列之外,Redis 还提供了一组命令实现发布/订阅模式。这种方式,发送者和接收者没有直接关联(实现了解耦),接收者也不需要持续尝

    试获取消息。
      首先,我们有很多的频道(channel),我们也可以把这个频道理解成 queue。订阅者可以订阅一个或者多个频道。消息的发布者(生产者)可以给指定的频道发布消息。
    只要有消息到达了频道,所有订阅了这个频道的订阅者都会收到这条消息。
      需要注意的注意是,发出去的消息不会被持久化,因为它已经从队列里面移除了,所以消费者只能收到它开始订阅这个频道之后发布的消息。下面我们来看一下发布订阅
    命令的使用方法。
      订阅者订阅频道:可以一次订阅多个,比如这个客户端订阅了 3 个频道。
    subscribe channel-1 channel-2 channel-3
      发布者可以向指定频道发布消息(并不支持一次向多个频道发送消息):
    publish channel-1 2673

      取消订阅(不能在订阅状态下使用):

    unsubscribe channel-1

    1.2.2 按规则(Pattern)订阅频道

      支持?和*占位符。?代表一个字符,*代表 0 个或者多个字符。
      消费端 1,关注运动信息:
    psubscribe *sport
      消费端 2,关注所有新闻:
    psubscribe news*
      消费端 3,关注天气新闻:
    psubscribe news-weather

      生产者,发布 3 条信息:

    publish news-sport yaoming 
    publish news-music jaychou
    publish news-weather rain

  • 相关阅读:
    R语言代写混合时间模型预测对时间序列进行点估计
    python代写安娜卡列妮娜词云图制作
    R语言代写markov switching model马尔可夫转换分析研究水资源
    R语言代写markov switching model马尔可夫转换模型研究商业周期
    Python代写数据可视化-seabornIris鸢尾花数据
    R语言代写聚类算法的应用实例
    用TensorFlow代写实现MNIST
    R语言代写Copula的贝叶斯非参数估计
    r语言代写预测波动率的实现:ARCH模型与HAR-RV模型
    CF932E Team Work 第二类斯特林数
  • 原文地址:https://www.cnblogs.com/talkingcat/p/13814964.html
Copyright © 2011-2022 走看看