zoukankan      html  css  js  c++  java
  • Redis 的消息订阅/发布

    简述

    Redis 还提供了一组命令可以让开发者实现“发布/订阅”(publish/subscribe)模式。“发布/订阅”模式同样可以实现进程间的消息传递,其原理是这样的:

    “发布/订阅”模式中包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息。

    发布者发布消息的命令是 PUBLISH,用法是 PUBLISH channel message ,channel 是频道,message是发布的消息。

    例如:

    127.0.0.1:6379> PUBLISH channel.1 hi 
    (integer) 0
    

    这样消息就发出去了。PUBLISH 命令的返回值表示接收到这条消息的订阅者数量。因为此时没有客户端订阅channel.1,所以返回 0。发出去的消息不会被持久化,也就是说当有客户端订阅 channel.1 后只能收到后续发布到该频道的消息,之前发送的就收不到了。

    订阅频道的命令是 SUBSCRIBE,可以同时订阅多个频道,用法是 SUBSCRIBE channel [channel …] 可以同时订阅多个频道。

    例如,订阅一个叫 bar 的频道:

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

    这时打开另一个客户端去发布消息:

    127.0.0.1:6379> publish bar "hi"
    (integer) 1
    127.0.0.1:6379>
    

    在订阅频道会收到:

    127.0.0.1:6379> subscribe bar
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "bar"
    3) (integer) 1
    1) "message"
    2) "bar"
    3) "hi
    

    执行 SUBSCRIBE 命令后客户端会进入订阅状态,处于此状态下客户端不能使用除SUBSCRIBE、UNSUBSCRIBE、PSUBSCRIBE 和 PUNSUBSCRIBE这4个属于“发布/订阅”模式的命令之外的命令,否则会报错。

    使用 UNSUBSCRIBE 命令可以取消订阅指定的频道,用法为 UNSUBSCRIBE [channel [channel …]],如果不指定频道则会取消订阅所有频道。

    按规则订阅

    除了可以使用SUBSCRIBE命令订阅指定名称的频道外,还可以使用PSUBSCRIBE命令订阅指定的规则

    客户端可以订阅一个带 * 号的模式, 如果某个/某些频道的名字和这个模式匹配, 那么当有信息发送给这个/这些频道的时候, 客户端也会收到这个/这些频道的信息。

    比如说,执行命令

    redis> PSUBSCRIBE news.*
    

    的客户端将收到来自 news.art.figurativenews.music.jazz 等频道的信息。

    客户端订阅的模式里面可以包含多个 glob 风格的通配符, 比如 *?[...] , 等等。

    执行命令

    redis> PUNSUBSCRIBE news.*
    

    将退订 news.* 模式, 其他已订阅的模式不会被影响。

    通过频道和模式接收同一条信息

    如果客户端订阅的多个模式匹配了同一个频道, 或者客户端同时订阅了某个频道、以及匹配这个频道的某个模式, 那么它可能会多次接收到同一条信息。

    举个例子, 如果客户端执行了以下命令:

    SUBSCRIBE foo
    PSUBSCRIBE f*
    

    那么当有信息发送到频道 foo 时, 客户端将收到两条信息: 一条来自频道 foo ,信息类型为 message ; 另一条来自模式 f* ,信息类型为 pmessage


  • 相关阅读:
    usaco-4.1-nuggets-passed
    usaco-3.4-rockers-passed
    usaco-3.4-fence9-passed
    usaco-3.4-heritage-passed
    usaco-3.3-game1-passed
    usaco-3.3-range-passed
    usaco-3.3-camelot-passed
    6.23课堂作业
    初识JVM虚拟机
    JDK安装以及配置环境变量的步骤
  • 原文地址:https://www.cnblogs.com/luler/p/15044693.html
Copyright © 2011-2022 走看看