百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

redis发布与订阅详解以及应用场景

mhr18 2024-10-29 14:33 31 浏览 0 评论

redis发布与订阅

本文讲解Redis发布(pub)与订阅(sub),它是一种消息通信模式,Redis的发布订阅机制包括三个主体,发布者,订阅者和Channel(频道)。

redis的发布与订阅的特点是订阅者负责订阅频道( channel),发送者( publisher)负责向频道发送二进制字符串消息(message)。当有信息被发送到定制的频道时,该频道的所有订阅者都将会受到消息。这个模式可以参考显示生活当中电台的运作流程。我们作为订阅者可以收听(即订阅)多个电台,而电台工作人员(发送者)可以在任何电台发送消息,收听的该电台的听众都可以收到该频道的消息。

redis订阅频道

redis的server端当中维持着一个pubsub_channels 属性是一个字典, 这个字典就用于保存订阅频道的信息。它是一个redis的list类型的结构。当客户端通过调用命令SUBSCRIBE进行订阅频道时,就把对应的客户端和订阅的频道通过字典pubsub_channels 中的频道信息进行关联。

比如:我们模拟三个客户端client1、client2、client3 同时订阅了channel1。命令如下:

SUBSCRIBE channel

当三个客户端都订阅了channe1频道后,我们通过PUBLISH命令给channe1发送信息,看看三个订阅该频道的客户端,是否收到对应的信息,命令如下:

PUBLISH channel "hello redis"

从上图可以看出,当发送者对频道发送信息时,三个客户端都可以收到订阅的信息。

redis发布与订阅常用命令:

1、Redis Subscribe 命令:用于订阅频道信息。如:

SUBSCRIBE channel

2、Redis Publish 命令:用于将信息发送到指定的频道。如:

PUBLISH channel "hello redis sub/pub"

3、Redis Psubscribe 命令:用于订阅一个或者多个按模糊条件匹配的频道,类似SQL中的like。如:(表示订阅所有以channel开始的所有频道)

PSUBSCRIBE channel*

4、Redis Pubsub 命令:用于查看订阅与发布系统状态,它由数个不同格式的子命令组成。比如查看活跃中的频道有哪些、频道的订阅者数量?如:

Pubsub channels --活跃的频道
PUBSUB NUMSUB channel--频道channel的订阅者数量

5、Redis Punsubscribe 命令:用于退订所有给定模式的频道。如果没有模式被指定,一个无参数的 PUNSUBSCRIBE 调用被执行,那么客户端订阅的频道都会被退订。

PUNSUBSCRIBE channel

6、Redis Unsubscribe 命令:用于退订给定的一个或多个频道的信息。如果没有指定频道,那么客户端订阅的所有频道都会被退订。

Unsubscribe 

总结:

1、redis的订阅频道的信息是redis服务器进程自己维持在?pubsub_channels链表字典当中。字典的KEY为被订阅的频道,值为订阅的客户端。

2、当发送者发送消息时,redis服务器遍历频道对应的所有客户端,然后将消息发送到所订阅的客户端上。

3、当有信息发送时,除了订阅该频道的客户端会收到消息,以及和订阅了匹配频道的客户端,其它客户端是收不到该信息的。

4、退订频道、退订模式和订阅频道、订阅模式是两组反操作。

应用场景:

俗话说的好,知识学得好不好,还得看用到哪。反正笔者看到redis的发布与订阅的模式的特点后,第一时间想到的是可以用来做一个实时聊天系统,还可以用来做分布式架构中写的过程,利用redis的实时发布功能,把要写入的值及时快速的分发到各个写入程序当中,保证分布式架构中数据的完整一致性。再比如博客系统和自媒体平台中,粉丝关注功能,就比如现在我的2000粉丝,当我发布文章时,就可以及时推送文章到粉丝的客户端上。总而言之,应用的场景比较多,需要大家多思考,多交流。

free教程,随时随地学习IT技术,欢迎关注交流

相关推荐

【预警通报】关于WebLogic存在远程代码执行高危漏洞的预警通报

近日,Oracle官方发布了2021年1月关键补丁更新公告CPU(CriticalPatchUpdate),共修复了包括CVE-2021-2109(WeblogicServer远程代码执行漏洞)...

医院信息系统突发应急演练记录(医院信息化应急演练)

信息系统突发事件应急预案演练记录演练内容信息系统突发事件应急预案演练参与人员信息科参与科室:全院各部门日期xxxx-xx-xx时间20:00至24:00地点信息科记录:xxx1、...

一文掌握怎么利用Shell+Python实现完美版的多数据源备份程序

简介:在当今数字化时代,无论是企业还是个人,数据的安全性和业务的连续性都是至关重要的。数据一旦丢失,可能会造成无法估量的损失。因此,如何有效地对分布在不同位置的数据进行备份,尤其是异地备份,成为了一个...

docker搭建系统环境(docker搭建centos)

Docker安装(CentOS7)1.卸载旧版Docker#检查已安装版本yumlistinstalled|grepdocker#卸载旧版本yumremove-ydocker.x...

基础篇:数据库 SQL 入门教程(sql数据库入门书籍推荐)

SQL介绍什么是SQLSQL指结构化查询语言,是用于访问和处理数据库的标准的计算机语言。它使我们有能力访问数据库,可与多种数据库程序协同工作,如MSAccess、DB2、Informix、M...

Java21杀手级新特性!3行代码性能翻倍

导语某券商系统用这招,交易延迟从12ms降到0.8ms!本文揭秘Oracle官方未公开的Record模式匹配+虚拟线程深度优化+向量API神操作,代码量直降70%!一、Record模式匹配(代码量↓8...

一文读懂JDK21的虚拟线程(java虚拟线程)

概述JDK21已于2023年9月19日发布,作为Oracle标准Java实现的一个LTS版本发布,发布了15想新特性,其中虚拟线程呼声较高。虚拟线程是JDK21中引入的一项重要特性,它是一种轻量级的...

效率!MacOS下超级好用的Linux虚拟工具:Lima

对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...

所谓SaaS(所谓三维目标一般都应包括)

2010年前后,一个科技媒体的主编写一些关于云计算的概念性问题,就可以作为头版头条了。那时候的云计算,更多的还停留在一些概念性的问题上。而基于云计算而生的SaaS更是“养在深闺人未识”,一度成为被IT...

ORA-00600 「25027」 「x」报错(报错0xc0000001)

问题现象:在用到LOB大对象的业务中,进行数据的插入,失败了,在报警文件中报错:ORA-00600:内部错误代码,参数:[25027],[10],[0],[],[],[],[],[...

安卓7源码编译(安卓源码编译环境lunch失败,uname命令找不到)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

编译安卓源码(编译安卓源码 电脑配置)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

360 Vulcan Team首战告捷 以17.5万美金强势领跑2019“天府杯“

2019年11月16日,由360集团、百度、腾讯、阿里巴巴、清华大学与中科院等多家企业和研究机构在成都联合主办了2019“天府杯”国际网络安全大赛暨2019天府国际网络安全高峰论坛。而开幕当日最激荡人...

Syslog 日志分析与异常检测技巧(syslog发送日志配置)

系统日志包含有助于分析网络设备整体运行状况的重要信息。然而,理解并从中提取有效数据往往颇具挑战。本文将详解从基础命令行工具到专业日志管理软件的全流程分析技巧,助你高效挖掘Syslog日志价值。Gr...

从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)

数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...

取消回复欢迎 发表评论: