• 发布订阅


    核心知识点:

    1.Redis提供简单的发布订阅功能,缺陷在于不能回溯、不能堆积消息。

    2.命令

      a.publish:发布消息

      b.subscribe:订阅频道

      c.unsubscribe:取消订阅

      d.psubscribe/punsubscribe:模式订阅或取消订阅

      e.pubsub:查看活跃频道、查看频道订阅数、查看模式订阅数

    Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,

    发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息。

    下面会介绍一些相关命令:

    1.发布消息

    publish channel message

    返回的结果为订阅者的个数,如果此时没有订阅,返回0:

    127.0.0.1:6379> publish channel:sports "Kobe retired today"
    (integer) 0

     

    2.订阅消息

    subscribe channel [channel ...]

    订阅者可以订阅一个或者多个频道:

    127.0.0.1:6379> subscribe channel:sports
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "channel:sports"
    3) (integer) 1
    ...此处是等待中

    在另一个客户端发布一条消息:

    127.0.0.1:6379> publish channel:sports "The Timberwolves win the Lakers"  #森林狼大胜湖人
    (integer) 1

    当前订阅者会收到消息:

    127.0.0.1:6379> subscribe channel:sports
    Reading messages... (press Ctrl-C to quit)
    ...
    1) "message"  #消息
    2) "channel:sports"  #频道
    3) "The Timberwolves win the Lakers"  #内容

    有关订阅命令有两点需要注意:

    (1)客户端在执行订阅命令之后进入订阅状态,只能接收subscribe、pubscribe、unsubscribe、pinsubscribe四个命令;

    (2)新开启的订阅客户端,无法接收到该频道之前的消息,因为Redis不会对发布的消息持久化。

    3.取消订阅

    unsubscribe [channel [channel ...]]

    客户端可以通过unsubscribe命令取消对指定频道的订阅,取消成功后,不会再收到该频道发布的消息:

    127.0.0.1:6379> unsubscribe channel:sports
    1) "unsubscribe"
    2) "channel:sports"
    3) (integer) 0

    4.按照模式订阅和取消订阅

    psubscribe pattern [pattern ... ]
    punsubscribe [pattern [pattern ... ]]

    除了subscribe和unsubscribe命令,Redis还支持glob风格的订阅命令psubscribe和取消订阅命令punsubscribe:

    127.0.0.1:6379> psubscribe w*
    Reading messages... (press Ctrl-C to quit)
    1) "psubscribe"
    2) "w*"
    3) (integer) 1

    5.查询订阅

    (1)查看活跃的频道

    pubsub channels [pattern]

     所谓活跃的频道是指当前频道至少有一个订阅者,其中[pattern]是可以指定具体的模式:

    127.0.0.1:6379> pubsub channels
    1) "write"
    2) "water"

    (2)查看频道的订阅数

    pubsub numsub [channel ... ]

    返回某一个频道的订阅数:

    127.0.0.1:6379> pubsub numsub write
    1) "write"
    2) (integer) 1  #订阅数为1

    (3)查看模式订阅数

    pubsub numpat

    所有的模式订阅也可以视作模糊订阅,就是使用subscribe来订阅频道的用户。

    127.0.0.1:6379> pubsub numpat  #当前没有模式订阅的用户
    (integer) 0

    虽然和很多专业的消息队列系统(Kafka、RocketMQ)相比,Redis的发布订阅略显粗糙,功能也有些简单,例如不支持消息堆积和回溯

    但是胜在足够简单,如果当前场景可以容忍这些缺点,也是一个不错的选择。

  • 相关阅读:
    CF1324F Maximum White Subtree
    CF1204C Anna, Svyatoslav and Maps
    CF1187E Tree Painting
    CF1304E 1-Trees and Queries
    深入探究jvm之类装载器
    深入探究jvm之GC的算法及种类
    深入探究jvm之GC的参数调优
    spring源码解析之AOP原理
    spring注解扫描组件注册
    cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/8180921.html
Copyright © 2020-2023  润新知