首页 > 数据库 >20. Redis---发布订阅

20. Redis---发布订阅

时间:2022-08-17 19:56:04浏览次数:82  
标签:订阅 www 20 Redis 频道 --- net biancheng channel

1. 前言

Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)。

消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的一种解耦方式。

2. 发布/订阅流程

下面的示例演示了“发布/订阅者”模式的工作流程,示意图如下所示:

Redis PubSub消息发布订阅
图1:发布订阅模式

1) 订阅者/等待接收消息

首先打开 Redis 客户端,然后订阅了一个名为“www.biancheng.net”的 channel,使用如下命令:

#订阅channel
127.0.0.1:6379> SUBSCRIBE www.biancheng.net
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "www.biancheng.net"
3) (integer) 1 

上述示例使用SUBSCRIBE命令订阅了名为 www.biancheng.net 的 channel。命令执行后该客户端会出处于等待接收消息的阻塞状态。

2) 发布者/发送消息

下面再启动一个 Redis 客户端,输入如下命令:

127.0.0.1:6379> PUBLISH www.biancheng.net "this is website"
(integer) 1
127.0.0.1:6379> PUBLISH www.biancheng.net "hello world"
(integer) 1
127.0.0.1:6379> PUBLISH www.biancheng.net "how are you"
(integer) 1

通过上述PUBLISH命令发布了三条信息。现在两个客户端在处于同一个名为“www.biancheng.net”的频道上,前者负责接收消息,后者负责发布消息。

3) 订阅者/成功接收消息

完成了上述操作后,您会在接收消息的客户端得到如下输出结果:

127.0.0.1:6379> SUBSCRIBE www.biancheng.net
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "www.biancheng.net"
3) (integer) 1
1) "message"
2) "www.biancheng.net"
3) "this is website"
1) "message"
2) "www.biancheng.net"
3) "hello world"
1) "message"
2) "www.biancheng.net"
3) "how are you"

3. 常用命令汇总

Redis PubSub常用命令
命令说明
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合指定模式的频道。
PUBSUB subcommand [argument [argument ...]] 查看发布/订阅系统状态,可选参数
1) channel 返回在线状态的频道。
2) numpat 返回指定模式的订阅者数量。
3) numsub 返回指定频道的订阅者数量。
PUBSUB subcommand [argument [argument ...]] 将信息发送到指定的频道。
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有指定模式的频道。
SUBSCRIBE channel [channel ...] 订阅一个或者多个频道的消息。
UNSUBSCRIBE [channel [channel ...]] 退订指定的频道。

 

4. 基本命令应用

下面对上述常用命令做演示:

#订阅指定模式的频道,*代表通配符,会匹配所有www开头的频道
127.0.0.1:6379> PSUBSCRIBE www*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "www*"
3) (integer) 1
#按ctrl+c退出阻塞状态
^C
C:\Users\Administrator>redis-cli
#查看发布订阅系统状态,返回相应的频道
127.0.0.1:6379> PUBSUB channels
1) "www.biancheng.net"
#退订指定模式的频道
127.0.0.1:6379> PUNSUBSCRIBE www*
1) "punsubscribe"
2) "www*"
3) (integer) 0
#退订指定频道
127.0.0.1:6379> UNSUBSCRIBE www.biancheng.net
1) "unsubscribe"
2) "www.biancheng.net"
3) (integer) 0

注意:每个模式以*作为匹配符,比如 www* 匹配所有以 www 开头的频道,比如 www.baidu.com 、www.biancheng.net  等等。

在线练习工具:https://try.redis.io/
查看更多命令:https://redis.io/commands

标签:订阅,www,20,Redis,频道,---,net,biancheng,channel
From: https://www.cnblogs.com/jiajunling/p/16596550.html

相关文章

  • 技术专家说 | 如何基于 Spark 和 Z-Order 实现企业级离线数仓降本提效?
    【点击了解更多大数据知识】市场的变幻,政策的完善,技术的革新……种种因素让我们面对太多的挑战,这仍需我们不断探索、克服。今年,网易数帆将持续推出新栏目「金融专家说」......
  • Redis---服务端命令
    1.前言Redis服务器是对客户端提供服务的主体,只要是安装了Redis数据库的计算机都可以通过本地,或者远程的方式对外提供服务。Redis服务器能够以高可用集群的方式对外提......
  • leetcode45-跳跃游戏 II
    跳跃游戏II前向dp对于一个数i,从0到i-1进行遍历,如果在这个位置能跳跃到i,那么对i的dp值进行更新。这种方式时间复杂度为O(n^2),效率很低classSolution{publici......
  • 媒体宝-环境准备
    4.媒体宝-环境由于代码需要放在服务器上才能让所有的功能正常运行,所以,开发测试时也需要将代码同步到服务器。可以用的代码同步方案有三种:基于IDE的Deployment的功能实......
  • 学习Js-day18
    放大镜的简单实现效果图如下:对结构,布局,效果,进行分析“一、结构分析:1.一个小盒子box包着一个移动的盒子move,再连接一个大盒子bigbox展示图片的细节。二、布局分析:1.放小......
  • 19. Redis---基数统计
    1.前言Redis经常使用的数据类型有字符串、列表、散列、集合和有序集合,但这些类型并不能满足所有的应用场景,因此,Redis的后续版本不断的扩增其他数据类型来增强Redis适......
  • day22--Java集合05
    Java集合0511.HashSet课堂练习11.1课堂练习1定义一个Employee类,该类包括:private成员属性name,age要求:创建3个Employee对象放入HashSet中当name和age的值相同时,认为是......
  • 2022/8/17 总结
    A.P4343[SHOI2015]自动刷题机啊对对对,算法都对了,二分写挂了:)Solution二分答案,每次\(\mathtt{O(n)}\)判断当前的\(mid\)是否可行,最大和最小分开二分;注意:......
  • Feature-aware Diversified Re-ranking with Disentangled Representations for Relev
    1.总体本文分为两个部分,第一个部分DAE框架,用于学习iterm的embedding,第二个部分是rerank框架考虑user_pref+relevance+diversity。2. DAE框架在快手短......
  • HDU-3065 病毒侵袭持续中
    思路:AC自动机模板题,最后拓扑优化即可,存下每个单词结尾的编号,通过编号找出它是否被遍历过。注意:该题是多组案例。实现:#include<stdio.h>#include<string.h>const......