当前位置: 首页 > news >正文

Redis发布订阅PUB/SUB

Redis发布订阅PUB/SUB是一种消息通信模式,发送者PUB发送消息,订阅者SUB接收消息。Redis客户端可以订阅任意数量的频道,一个通道CHANNEL可以被多个客户端订阅,当一条消息发送到CHANNEL中去后所有订阅的客户端都会接收到此消息。

一、Redis客户端命令
  • 订阅一个或多个频道
SUBSCRIBE channel[channel ...] 
  • 取消客户端对一个或多个频道的订阅
UNSUBSCRIBE [channel [channel ...]]
  • 订阅一个或多个符合给定模式的频道
PSUBSCRIBE pattern [pattern ...]
  • 取消一个或多个符合给定模式的频道的订阅
PUNSUBSCRIBE [pattern [pattern ...]]
  • 向通道中发送消息
PUBLISH channel message
  • 查询活跃channel列表
PUBSUB CHANNELS [pattern]
  • 查询已订阅模式的数量
PUBSUB NUMPAT 
二、springboot发布订阅频道
  • 定义Receiver实体类
public class Receiver {private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);private AtomicInteger counter = new AtomicInteger();public void receiveMessage(String message) {LOGGER.info("Received <" + message + ">");counter.incrementAndGet();}public int getCount() {return counter.get();}
}
  • 定义订阅消息通道配置类
@Configuration
public class RedisConfig {@Beanpublic String register(RedisMessageListenerContainer factory, MessageListenerAdapter messageListenerAdapter) {factory.addMessageListener(messageListenerAdapter, PatternTopic.of("test"));factory.addMessageListener(messageListenerAdapter, ChannelTopic.of("test1"));return "success";}@Beanpublic String register1(@Qualifier("test1RedisMessageListenerContainer") RedisMessageListenerContainer factory, MessageListenerAdapter messageListenerAdapter) {factory.addMessageListener(messageListenerAdapter, PatternTopic.of("test"));factory.addMessageListener(messageListenerAdapter, PatternTopic.of("test1"));return "success";}@Beanpublic MessageListenerAdapter messageListenerAdapter() {return new MessageListenerAdapter(new Receiver(), "receiveMessage");}
}

上述是基于自定义redis sdk,支持多个RedisMessageListenerContainer

  • 向频道中发送消息
    @GetMapping("send")public void send() {RedisDbFactory.getStringRedisTemplate().convertAndSend("test", "测试消息");RedisDbFactory.getStringRedisTemplate("test1").convertAndSend("test1", "测试消息1");}

开源SDK:https://github.com/mingyang66/spring-parent

相关文章:

Redis发布订阅PUB/SUB

Redis发布订阅PUB/SUB是一种消息通信模式&#xff0c;发送者PUB发送消息&#xff0c;订阅者SUB接收消息。Redis客户端可以订阅任意数量的频道&#xff0c;一个通道CHANNEL可以被多个客户端订阅&#xff0c;当一条消息发送到CHANNEL中去后所有订阅的客户端都会接收到此消息。 一…...

Scratch教师节 —— 感恩教师节

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! Scratch教师节动画作品——感恩教师节 在这个特别的日子里&#xff0c;我们迎来了教师节。为了表达对老师们的感激之情&#xff0c;Scratch平台上的小朋友们用创意与热情制作了精彩的动画作品——“感恩教师节”。…...

【60天备战软考高级系统架构设计师——第五天:需求分析方法与工具】

在完成了需求获取的初步工作后&#xff0c;今天我们将专注于需求分析的方法与工具。需求分析是将需求转化为可实现系统的关键步骤&#xff0c;直接影响到系统的最终效果。 需求分析方法 用例分析 用例分析通过描述用户与系统的交互行为&#xff0c;明确系统需要实现的功能。用…...

【Hot100算法刷题集】哈希-01-两数之和(暴力枚举再优化,也不是哈希表的对手)

&#x1f3e0;关于专栏&#xff1a;专栏用于记录LeetCode中Hot100专题的所有题目 &#x1f3af;每日努力一点点&#xff0c;技术变化看得见 题目转载 题目描述 &#x1f512;link->题目跳转链接 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中…...

基于.NET6的WPF基础总结(上)

目录 一.常用属性介绍 二、 程序退出方式 三、布局样式 3.1 Panel的附加属性ZIndex 3.2 Grid(网格)布局 3.3 UniformGrid&#xff08;均分布局&#xff09; 3.4 StackPanel&#xff08;堆积面板&#xff09; 3.5 WrapPanel&#xff08;换行面板&#xff09; 3.6 Doc…...

Nuxt3入门:资源文件(第2节)

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 Nuxt 为资源存放提供两种选择。可以使用两个目录&#xff08;public/assets&#xff09;来处理样式表、字体或图像等资源。 public/ 此目录中的文件将按原样复制到服务器根目录中。assets/ 此目录中的…...

企业微信中嵌套的h5应用调用微信扫码功能

企业微信官方文档 1.登录企业微信后台,管理员可操作,打开应用配置应用可信域名(必须配置,否则无法调用jsapi,可信域名必须有ICP备案且在管理端验证域名归属) 配置部署后的前台域名地址 配置可信域名,部署后的服务器域名(需备案认证) 当域名权限不够时需下载文件效验,将文件放…...

Excel如何把表格变成图表

Excel如何把表格变成图表 ‌将Excel表格转换为图表‌的过程相对简单且直观&#xff0c;主要步骤包括准备数据、插入图表、设置图表格式等。 以下是详细的步骤说明&#xff1a; ‌准备数据‌&#xff1a;首先&#xff0c;在Excel表格中输入或准备好要创建图表的数据。这些数据可…...

HTTP 三、http在springboot中得应用

一、springboot处理http请求的过程 1、客户端发起HTTP请求&#xff0c;经过网络传输到服务器 HTTP请求通常由浏览器、Postman、curl或其他HTTP客户端发起&#xff0c;客户端的HTTP请求通过网络&#xff08;通常是TCP/IP协议&#xff09;传输到服务器&#xff0c;这个请求首先会…...

Java秋招面经(网搜版)

1.redis的数据结构 Redis 提供了多种高效的数据结构来满足不同的应用需求。主要包括字符串&#xff08;String&#xff09;&#xff0c;这是最基础的数据类型&#xff0c;支持存储和操作各种数据&#xff1b;哈希&#xff08;Hash&#xff09;&#xff0c;类似于键值对的集合&…...

【Android】Material Design编写更好的UI

Toolbar 对于控件ActionBar我们非常熟悉&#xff0c;就是我们常见的标题栏&#xff0c;但ActionBar只能位于活动的顶部&#xff0c;因此我们更建议使用Toolbar。在新建一个项目的时候都是默认显示ActionBar&#xff0c;我们要使用Toolbar就需要先将标题栏改为不显示 先来看看…...

剪辑视频,这四大工具助你一臂之力!

在这个数字化的时代&#xff0c;视频已成为一种重要的表达手段。无论您是专业视频制作者还是只是偶尔想要编辑一些个人视频&#xff0c;一款优秀的视频剪辑软件都将是您不可或缺的好帮手。以下是几款值得推荐的视频剪辑软件。 福昕视频剪辑 直达链接&#xff1a;www.pdf365.c…...

基于单片机的热成像测温显示系统设计

本设计基于单片机的热成像测温显示系统&#xff0c;本系统包括STM32F103C6T6微控制器、MLX90640红外温度传感器、TFT-LCD显示屏、AT24C02存储模块、报警模块、按键模块和MP3语音播报模块。其可以通过热成像传感器对被检测物体的温度进行非接触式测量&#xff0c;并能够将被测信…...

CSS系列之Float浮动(二)

一、传统网页布局 网页布局的本质&#xff1a;用 CSS 来摆放盒子&#xff0c;把盒子摆放到相应位置。CSS 提供了三种传统布局方式&#xff08;这里指的只是传统布局&#xff0c;其实还有一些特殊高级的布局方式&#xff09;&#xff1a; 标准流浮动定位 1、所谓的标准流&#…...

macos下的 sed命令安装与使用 gnu-sed

sed命令是我们在linu类系统中非常重要的一个命令, 但是在macos下面默认是没有sed命令的, 不过我们可以通过brew install gnu-sed ( 或者通过 sudo port install gsed )这个软件包来获得这个命令 GNU sed 命令安装 下面2种方式,选择一种安装即可 # brew安装 brew install gn…...

RLC(电阻、电感、电容)

RLC&#xff08;电阻、电感、电容&#xff09; 目录一、两个电阻&#xff08;R1&#xff0c;R2&#xff09;&#xff0c;电容&#xff08;C1&#xff0c;C2&#xff09;的串联/并联公式&#xff1f;二、请画出这个1ms&#xff0c; 1V的Vin脉冲信号在Vout端的大致图像1.电路图2.…...

语音测试(一)ffmpeg视频转音频

视频转音频 下载ffmpeg工具进入bin目录cmd进入控制台输入命令 ffmpeg.exe -i ./视频.mp4 ./音频.wav命令说明 ffmpeg -i input.mp4 output.mkv FFmpeg 可能会尝试自动选择合适的编码器对视频和音频进行重新编码&#xff0c;以便适应 MKV 格式的要求ffmpeg -i input.mp4 -c c…...

计算机网络八股文之TCP协议

TCP/IP模型 链路层 物理层&#xff1a;主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由1、0转化为电流强弱来进行传输&#xff0c;到达目的地后再转化为1、0&#xff0c;也就是我们…...

【linux】linux中如何通过stress进行压力测试,原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

python用波形显示udp数据实现一个模拟示波器

显示端代码: import socket import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np# UDP setup udp_ip = 0.0.0.0 # Listen on all network interfaces udp_port = 12345 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)…...

DeepSeek-OCR-2开源可部署:完全离线运行的国产OCR大模型方案

DeepSeek-OCR-2开源可部署&#xff1a;完全离线运行的国产OCR大模型方案 1. 项目简介 DeepSeek-OCR-2是DeepSeek团队于2026年1月发布的创新OCR识别模型&#xff0c;采用完全开源的方式提供给开发者使用。这个模型最大的特点是实现了完全离线运行&#xff0c;不需要依赖任何外…...

算法——bfs/dfs

Find The Multiple 给定一个正整数 n&#xff0c;编写一个程序找出 n 的一个非零倍数 m&#xff0c;其十进制表示只包含数字 0 和 1。可以假设 n 不大于 200&#xff0c;并且存在一个 m&#xff0c;其十进制表示不超过 100 位。 输入 输入文件可能包含多个测试用例。每一行包含…...

红外遥控技术原理与电路设计实践

1. 红外遥控技术概述红外遥控技术自20世纪70年代问世以来&#xff0c;已经成为家电控制领域最成熟、应用最广泛的无线控制方案。作为一名电子工程师&#xff0c;我在多个家电项目中都深度应用过这项技术。它的核心原理其实很简单&#xff1a;通过红外发光二极管&#xff08;IRE…...

并发测试中的时序问题:如何复现与修复?

在分布式系统与高并发应用日益普及的今天&#xff0c;时序问题已成为软件测试领域最具挑战性的难题之一。这类问题往往表现为数据不一致、状态错乱、逻辑异常或系统崩溃&#xff0c;其根源在于多个线程或进程对共享资源或状态的操作顺序与预期不符。对于软件测试从业者而言&…...

LeetCode刷题保姆级攻略:用滑动窗口秒杀「无重复字符的最长子串」和「最小覆盖子串」

LeetCode滑动窗口算法精讲&#xff1a;从暴力解法到最优解的思维跃迁 滑动窗口算法是解决字符串和数组子序列问题的利器&#xff0c;尤其适合处理"最长子串"、"最小覆盖子串"这类经典问题。很多开发者在初次接触这类题目时&#xff0c;往往会陷入暴力解法…...

【稀缺首发】PyTorch 3.0静态图分布式训练性能基线报告(A100×8实测:静态图提速2.7×,通信开销下降63%)

第一章&#xff1a;PyTorch 3.0静态图分布式训练配置概览PyTorch 3.0 引入了原生静态图&#xff08;Static Graph&#xff09;支持&#xff0c;通过 torch.compile() 默认后端 inductor 与分布式运行时深度协同&#xff0c;显著提升多卡训练的启动速度与稳定吞吐。静态图模式下…...

华三MSR系列路由器单臂路由配置全记录:从实验环境搭建到真机部署避坑指南

华三MSR路由器单臂路由实战&#xff1a;从实验室到生产环境的全流程指南 单臂路由技术在企业网络架构中扮演着关键角色&#xff0c;特别是在需要实现多VLAN互通又要求流量隔离的中小型网络场景。华三MSR系列路由器&#xff08;如MSR2600/3600&#xff09;凭借其稳定的性能和灵活…...

leetcode 73

束手无策。题意看起来是简单的&#xff0c;但是实行起来是困难的。matrix 是行的集合&#xff0c;换句话说&#xff0c;就是一个二维数组里面存了行&#xff0c;很多个行&#xff0c;matrix 0 存的是第 0 行。其实有点难。但是我一定可以的。我是可以的。我一遍一遍地告诉自己&…...

OpenMMLab 环境配置避坑指南:从 ModuleNotFoundError 到 YOLO 模型成功部署

1. 环境配置的常见报错与诊断方法 当你第一次尝试在OpenMMLab框架下运行YOLO模型时&#xff0c;ModuleNotFoundError可能是最令人头疼的拦路虎。这个报错看似简单&#xff0c;背后却可能隐藏着多种环境配置问题。我最近在帮团队新人配置环境时&#xff0c;就遇到了至少三种不同…...

新手入门:利用快马平台快速理解与模拟openclaw重启命令执行

今天想和大家分享一个特别适合机器人编程新手的实践项目——如何在安全可控的环境下理解和模拟openclaw机械爪的重启命令。这个过程中我发现了InsCode(快马)平台这个神器&#xff0c;它让整个学习过程变得异常简单。 为什么需要专门学习重启命令&#xff1f; 机械爪作为机器人常…...