• Redis 发布/订阅


    发布/订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

    pub即publish,出版、发布;publisher,发布者。

    sub即subscribe,订阅;subscriber,订阅者。

    订阅者订阅某个channel(频道),发布者将消息发布到某个频道,redis服务器将消息推送给这个频道的所有订阅者。

    channel  管道、通道、频道。

     发布者、订阅者都是redis的客户端,每个redis客户端都可以是发布者,往某个频道中发布消息。

     

    Redis的消息是在线即时消息,类似于广播,只有在线的订阅者(连接到Redis服务器的客户端),才会收到消息。

    若当时不在线,并不会收到消息。后面登陆了(连接到服务器),服务器也不会推送之前(这个客户端未收到)的消息。服务器只推送一遍。


    使用示例

    1、启动一个redis客户端,连接到服务器,订阅频道

     subscribe channel1     #订阅channel1

     

    一个条目用3项表示:

    (1)"subscribe"   这个条目是一个订阅的频道

    (2)频道名

    (3)这个频道是当前客户端订阅的第几个频道

    订阅之后,当前标签页会一直阻塞,等待接收Redis服务器推送的消息。

    2、另起一个标签页,再运行一个redis客户端,连接redis服务器,推送消息

    publish channel1 "hello"   #向channel1里推送一条消息,消息内容是hello

    返回接收到此消息的订阅者数量。

    每个客户端都可以往某个频道中发送消息,这些消息由redis服务器推送给所有在线的、订阅了此频道的客户端。

    3、切换到另一个标签页,看到订阅channel1的客户端已经接受到消息:

    (1)“message”   表示这是一条消息

    (2)这条消息来自哪个频道

    (3)消息内容

    此客户端订阅了哪些频道,这些信息保存在redis服务器上,关闭与redis服务器的连接,redis服务器会删除该连接(该客户端的信息),订阅了哪些频道,这些信息就没了。

    即订阅只在本次连接期间有效。


     

    发布/订阅的相关命令

    subscribe  channel1  channel2   #订阅一个或多个频道

    psubscribe CCTV1  #p即pattern,用正则表达式指定要订阅的频道,会订阅所有匹配的频道
    psubscribe CCTV*  #订阅所有以CCTV开头的频道
    psubscribe *TV  #订阅所有以TV结尾的频道
    psubscribe CCTV* CNTV* #可以指定多个匹配模式,订阅以CCTV开头的所有频道、订阅所有以CNTV开头的所有频道

    un
    subscribe channel1 channel2 #退订一个或多个频道

    punsubscribe CCTV* CNTV* #退订以CCTV开头的所有频道、退订以CNTV开头的所有频道


    publish  channel1 "hello" #往某个频道里推送消息

  • 相关阅读:
    浅析一类要求相邻不同的环上染色问题
    中国剩余定理(CRT)及其扩展(ExCRT)
    bsoj5988 [Achen模拟赛]期望 题解
    涂色游戏 题解
    [JZOJ A组]球 题解
    由 [SDOI2012]Longge的问题 探讨欧拉函数和莫比乌斯函数的一些性质和关联
    [NOIP模拟]文本编辑器 题解
    Nilearn 小记
    django 开发笔记1
    浅谈无需工作量证明的加密货币
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11076790.html
Copyright © 2020-2023  润新知