Redis订阅回调函数怎么用?消息监听和处理怎么优雅实现?

文章导读
Redis 订阅回调函数主要通过发布/订阅(Pub/Sub)模式实现。使用者需在客户端使用 SUBSCRIBE 或 PSUBSCRIBE 命令监听特定频道,当服务端收到 PUBLISH 消息时,会自动触发客户端注册的回调函数处理逻辑。优雅实现消息监听通常依赖框架提供的 MessageListener 接口或异步回调机制,避免阻塞主线程。在 PHP 中可通过 psubscribe 配合回调函数,在
📋 目录
  1. A php 监听 redis key 失效触发回调事件 (订阅消息)
  2. B 你真的会用 Redis 发布订阅吗?Spring Data Redis 中必须掌握的 4 种监听模式
  3. C SpringBoot+Redis 自定义注解实现发布订阅,3 步让你的消息系统活起来!
  4. D 手把手带你了解 redis 回调机制及代码实现
  5. E Redis 的发布与订阅最佳实践
  6. F FAQ
A A

Redis 订阅回调函数主要通过发布/订阅(Pub/Sub)模式实现。使用者需在客户端使用 SUBSCRIBE 或 PSUBSCRIBE 命令监听特定频道,当服务端收到 PUBLISH 消息时,会自动触发客户端注册的回调函数处理逻辑。优雅实现消息监听通常依赖框架提供的 MessageListener 接口或异步回调机制,避免阻塞主线程。在 PHP 中可通过 psubscribe 配合回调函数,在 Spring Boot 中可利用 MessageListener 或自定义注解实现异步消费,同时需配置 notify-keyspace-events 处理键过期等特定事件回调,确保系统解耦与实时性。

php 监听 redis key 失效触发回调事件 (订阅消息)

然后我们决定使用 redis 的 key 失效的时候 来 触发一个回调事件 下面是我做这个功能的记录 第一步 是修改 redis 的配置文件 Key 过期事件的 Redis 配置 这里需要修改 redis 的配置的文件,配置 notify-keyspace-events 的参数为"Ex"。x 代表了过期事件。notify-keyspace-events"Ex"保存配置后,重启 Redis 服务,使配置生效。先开启一个 redis-cli 客服端,订阅所有操作,等待接收消息 Psubscribekeyevent@0:expired 2.再开启一个终端,redis-cli 进入 redis,新增一个 10 秒过期的键 10 秒过期后,接收到的消息如下:如果这个时候 消息 接收到了 就证明 配置没有问题了 接下来 就是写代码 第一步 设置过期事件:index.php 1.require_once'./Redis.class.php';2.$redis=new\Redis();3.$order_id=123;4.$redis->setex('order_id',10,$order_id); 一键获取完整项目代码 php 1 2 3 4 过期事件的订阅:psubscribe.php 1.require_once'./Redis.class.php';2.$redis=new\Redis();3.// 解决 Redis 客户端订阅时候超时情况 4.$redis->setOption();5.$redis->psubscribe(array('__keyevent@0__:expired'),'keyCallback');6.// 回调函数,这里写处理逻辑 7.functionkeyCallback($redis,$pattern,$chan,$msg)8.{9.echo"Pattern:$pattern\n";10.echo"Channel:$chan\n";11.echo"Payload:$msg\n\n";12.}(发布时间是 2020 年 8 月 26 日)

你真的会用 Redis 发布订阅吗?Spring Data Redis 中必须掌握的 4 种监听模式

Redis 的发布订阅 (Pub/Sub) 模式是一种消息通信机制,允许发送者 (发布者) 将消息发送到特定的频道,而接收者 (订阅者) 可以监听这些频道并接收对应的消息。该模式实现了消息的解耦,适用于实时消息广播、事件通知等场景。核心概念 发布者 (Publisher):向指定频道发送消息的客户端。订阅者 (Subscriber):监听一个或多个频道以接收消息的客户端。频道 (Channel):消息传递的逻辑通道,发布者和订阅者通过频道进行通信。基本操作指令 订阅者通过 SUBSCRIBE 命令监听频道:SUBSCRIBE news.channel # 输出示例:# Reading messages (press Ctrl+C to quit) # 1) "subscribe" # 2) "news.channel" # 3) (integer) 1 一键获取完整项目代码 发布者使用 PUBLISH 向频道发送消息:PUBLISH news.channel"Hello, Redis Pub/Sub!" # 返回值为接收到消息的订阅者数量 一键获取完整项目代码 支持模式匹配的订阅 Redis 还支持通过 PSUBSCRIBE 订阅符合模式的多个频道:PSUBSCRIBE news.* # 将匹配所有以 news. 开头的频道 一键获取完整项目代码 典型应用场景对比

场景是否适合使用 Pub/Sub说明
实时聊天系统用户加入频道后可实时接收消息
任务队列处理无持久化保证,建议使用 Redis Streams服务状态广播微服务间快速通知上线/下线状态
graph LR A[Publisher] -->|PUBLISH channel msg| B(Redis Server) B -->|MESSAGE channel msg| C[Subscriber] B -->|MESSAGE channel msg| D[Subscriber] 第二章:基于 MessageListener 的监听模式 2.1 MessageListener 接口核心原理剖析 MessageListener 是消息中间件中实现异步消费的核心接口,其设计遵循事件驱动模型,允许客户端在接收到消息时自动触发回调方法。核心方法与回调机制 该接口通常定义一个 onMessage(Message message) 方法,当有新消息到达时,消息代理会主动调用此方法并传入消息实例。publicvoidonMessage(Message message){ if(messageinstanceofTextMessage) { TextMessagetextMessage=(TextMessage) message; System.out.println("接收到消息:"+ textMessage.getText()); } } 一键获取完整项目代码 上述代码展示了如何处理文本类型的消息。(截至 2025 年 10 月 31 日)

SpringBoot+Redis 自定义注解实现发布订阅,3 步让你的消息系统活起来!

今天我们要一起探索如何在 Spring Boot 项目中使用 Redis 实现消息的发布与订阅功能,并且通过自定义注解的方式让这一切变得更加灵活和优雅。想象一下,如果你可以像变魔术一样轻松地将消息发送到指定频道,并且有监听者能够自动响应这些消息,那该有多酷?没错,这就是我们所说的发布/订阅模式的魅力所在。那么,究竟该如何做到这一点呢?别急,接下来我会手把手教你一步步实现这个功能。一、为什么选择 Redis 作为消息中间件?首先,让我们来了解一下为什么 Redis 会成为构建发布/订阅系统的理想选择。Redis 不仅是一个高性能的键值存储系统,它还提供了丰富的数据结构支持以及内置的发布/订阅机制。这意味着你可以利用它的速度优势快速处理大量消息,同时还能享受简单易用的消息传递特性。更重要的是,相比于传统的消息队列 (如 RabbitMQ 或 Kafka),Redis Pub/Sub 更加轻量级,非常适合那些不需要复杂配置却希望拥有高效通信能力的应用场景。二、什么是发布/订阅模式?在深入探讨具体实现之前,先简单介绍一下发布/订阅模式的基本概念。在这个模式下,发布者负责向一个或多个频道发送消息,而订阅者则监听特定频道以接收感兴趣的内容。每当有新消息到来时,所有注册了该频道的订阅者都会立即获得通知并执行相应的操作。这种方式有效地解耦了生产者和消费者之间的关系,使得整个架构更加灵活且易于扩展。(资料日期为 2025 年 2 月 4 日)

手把手带你了解 redis 回调机制及代码实现

1.redis 回调 1.概念 Redis 是一种高性能的内存数据存储系统,它支持多种数据结构和灵活的操作。除了提供常规的键值存储功能外,Redis 还支持订阅/发布、事务、Lua 脚本等高级功能,其中回调函数是 Redis 的一个重要特性之一。回调函数是一种在特定事件发生时自动执行的函数。在 Redis 中,回调函数通常用于在特定事件发生时自动执行一些操作。这些事件包括:客户端连接/断开连接 数据库键过期 发布/订阅消息 通过使用回调函数,我们可以在这些事件发生时执行一些自定义的逻辑,从而实现更加灵活和复杂的应用程序。2.脚本配置文件 在 Redis 中,回调函数通常是通过在配置文件中定义来注册的。下面是一个示例配置文件,其中包含了一些回调函数的定义:代码语言:javascript AI 代码解释 bashCopy code # Sample Redis configuration file # Register a callbackfunctionto execute when a client connects client-connect-callback/path/to/client-connect-script.sh # Register a callbackfunctionto execute when a client disconnect client-disconnect-callback/path/to/client-disconnect-script.sh # Register a callbackfunctionto execute when a key expires keyspace-event-notification expired/path/to/key-expire-script.sh # Register a callbackfunctionto execute when a message is published to a channel notify-keyspace-eventsKEA/path/to/pubsub-script.sh 在上面的示例中,我们注册了四个回调函数。第一个回调函数在客户端连接时执行,第二个在客户端断开连接时执行,第三个在键过期时执行,第四个在消息发布时执行。要使用回调函数,我们需要编写相应的脚本。脚本可以是任何可执行文件,如 Bash 脚本、Python 脚本等等。下面是一个示例 Bash 脚本,用于在客户端连接时打印一条消息:代码语言:javascript AI 代码解释 bashCopy code #!/bin/bash echo"A client has connected" 在上面的脚本中,我们使用了 echo 命令来输出一条消息。当客户端连接时,Redis 会自动执行这个脚本,并将消息输出到控制台。(2023 年 3 月 9 日)

Redis订阅回调函数怎么用?消息监听和处理怎么优雅实现?

Redis 的发布与订阅最佳实践

Redis 发布订阅 (Pub/Sub) 是 Redis 提供的一种消息传递机制,它使用"发布者 - 订阅者"(publisher-subscriber) 模式来处理消息传递。在这种模式下,发布者将消息发布到一组订阅者中,而无需关心谁是订阅者,也不需要知道订阅者是否收到了消息。发布者和订阅者模式允许多个客户端之间建立一个复杂的通信拓扑。在这种模式下,发布者可以发布消息到一个特定的主题,订阅者可以订阅一个或多个主题,并在发布者发布消息时收到消息。由于发布者和订阅者不必直接连接,因此发布者和订阅者可以完全独立地运行,只要它们都连接到 Redis 实例即可。Redis 发布订阅支持多种消息类型,包括文本、字节数组和数字等。Redis 还支持订阅者识别特定消息,通过模式匹配功能,可以基于主题模式或模式来检索消息。Redis 还提供了许多 API 来帮助您实现发布/订阅模式,因此您可以使用 Redis 的发布/订阅功能来构建分布式应用程序。Redis 发布/订阅 (Pub/Sub) 分为两种 第一种基于频道 (Channel) 的发布/订阅。第二种基于模式 (pattern) 的发布/订阅。确实,Redis 提供了一系列的 Pub/Sub 命令来支持基于频道和基于模式的发布/订阅模式。以下是一些常用的 Pub/Sub 命令:基于频道的发布/订阅 发布消息到指定频道 PUBLISHchannel message 例如:PUBLISHmy-channel"Hello, Redis!" 这将向名为 my-channel 的频道发布消息"Hello, Redis!"。订阅一个或多个频道 SUBSCRIBEchannel channel 例如:SUBSCRIBEmy-channel your-channel 这将订阅 my-channel 和 your-channel 两个频道。取消订阅一个或多个频道 UNSUBSCRIBE[channel channel ] 例如:UNSUBSCRIBEmy-channel your-channel 这将取消订阅 my-channel 和 your-channel 两个频道。基于模式的发布/订阅 订阅一个或多个匹配模式 PSUBSCRIBEpattern pattern 例如:PSUBSCRIBEnews-* 这将订阅所有以 news-开头的频道。取消订阅一个或多个匹配模式 PUNSUBSCRIBE[pattern pattern ] 例如:PUNSUBSCRIBEnews-* 这将取消订阅所有以 news-开头的频道。注意:Pub/Sub 命令可以在客户端和服务器之间进行通信,用于实现消息的发布和订阅。这些命令是异步执行的,发送命令后,订阅者将在接收到消息时收到通知。Pub/Sub 是一个强大的工具,用于实现实时消息传递和事件通知。基于 MessageListener 实现 创建消息接收者 创建一个接收消息的 Bean。(搜索结果收录于 2024 年 11 月 25 日)

FAQ

Redis 订阅回调函数是否支持持久化消息?

不支持。Redis 的 Pub/Sub 模式是即时性的,如果订阅者离线,消息不会保留,重新上线后无法接收离线期间的消息。如需持久化建议使用 Redis Streams。

Redis订阅回调函数怎么用?消息监听和处理怎么优雅实现?

如何在 PHP 中避免订阅阻塞主线程?

可以使用 psubscribe 配合回调函数,或者在独立进程中运行订阅脚本,也可以通过框架提供的异步扩展来处理消息监听,避免阻塞 Web 请求。

Spring Boot 中如何优雅监听 Redis 消息?

可以实现 MessageListener 接口并重写 onMessage 方法,或者使用自定义注解配合 RedisMessageListenerContainer 配置,实现异步自动消费。