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

redis 消息订阅命令

在 Redis 中,消息订阅和发布是一种用于实现消息传递的机制。主要命令包括 SUBSCRIBEUNSUBSCRIBEPUBLISHPSUBSCRIBE 等。下面是如何使用这些命令的详细说明和示例。

1. SUBSCRIBE 命令

SUBSCRIBE 命令用于订阅一个或多个频道,以接收这些频道发布的消息。

SUBSCRIBE channel1 channel2

2. UNSUBSCRIBE 命令

UNSUBSCRIBE 命令用于取消订阅一个或多个频道。

UNSUBSCRIBE channel1 channel2

3. PUBLISH 命令

PUBLISH 命令用于向一个频道发布消息。

PUBLISH channel1 "Hello, World!"

4. PSUBSCRIBE 命令

PSUBSCRIBE 命令用于订阅与模式匹配的一个或多个频道。

PSUBSCRIBE news.*

示例

1. 订阅和接收消息

在一个 Redis 客户端中订阅频道:

redis-cli
> SUBSCRIBE channel1

此时,该客户端将进入订阅模式并等待来自 channel1 的消息。

2. 发布消息

在另一个 Redis 客户端中发布消息:

redis-cli
> PUBLISH channel1 "Hello, Channel 1!"

在第一个客户端中,你会看到如下输出:

1) "message"
2) "channel1"
3) "Hello, Channel 1!"
3. 模式匹配订阅

在一个 Redis 客户端中订阅匹配模式的频道:

redis-cli
> PSUBSCRIBE news.*

此时,该客户端将接收所有匹配 news.* 模式的频道消息。

在另一个 Redis 客户端中发布消息:

redis-cli
> PUBLISH news.sports "Sports News"
> PUBLISH news.weather "Weather News"

在第一个客户端中,你会看到如下输出:

1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports News"
1) "pmessage"
2) "news.*"
3) "news.weather"
4) "Weather News"

使用 Lua 脚本进行消息订阅

在 OpenResty 或其他嵌入式 Lua 环境中,你可以使用 Lua 脚本与 Redis 进行交互。

1. 使用 Lua 脚本订阅 Redis 频道
local redis = require "resty.redis"
local red = redis:new()red:set_timeout(1000) -- 1 seclocal ok, err = red:connect("127.0.0.1", 6379)
if not ok thenngx.say("failed to connect: ", err)return
endlocal res, err = red:subscribe("channel1")
if not res thenngx.say("failed to subscribe: ", err)return
endwhile true dolocal res, err = red:read_reply()if res thenngx.say("received message: ", res[3])elsengx.say("failed to read reply: ", err)breakend
end
2. 使用 Lua 脚本发布 Redis 消息
local redis = require "resty.redis"
local red = redis:new()red:set_timeout(1000) -- 1 seclocal ok, err = red:connect("127.0.0.1", 6379)
if not ok thenngx.say("failed to connect: ", err)return
endlocal res, err = red:publish("channel1", "Hello, World!")
if not res thenngx.say("failed to publish: ", err)return
endngx.say("message published to channel1")

通过这些示例,你可以在 Redis 中实现基本的消息订阅和发布功能。

http://www.lryc.cn/news/391001.html

相关文章:

  • springboot接口防抖【防重复提交】
  • 每日一题——Python实现PAT乙级1026 程序运行时间(举一反三+思想解读+逐步优化)五千字好文
  • 还在Excel中管理您的持续改进项目吗?
  • CentOS 7 内存占用过大导致 OOM Killer 杀掉了 Java 进程
  • 在postgrel中使用hints
  • OceanBase Meetup北京站|跨行业应用场景中的一体化分布式数据库:AI赋能下的探索与实践
  • Spring Boot:轻松设置全局异常处理
  • Omni3D目标检测
  • 前端三件套开发模版——产品介绍页面
  • Android Bitmap 和Drawable的区别
  • Linux和windows网络配置文件的修改
  • 【.NET全栈】第16章 Web开发
  • 检测水管缺水的好帮手-管道光电液位传感器
  • 渗透测试流程基本八个步骤
  • 2024年移动手游趋势:休闲类手游收入逆势增长,欧美玩家成为主力
  • npm 淘宝镜像证书过期,错误信息 Could not retrieve https://npm.taobao.org/mirrors/node/latest
  • axios发送请求,后端无法获取cookie
  • 【Spring Boot 源码学习】初识 ConfigurableEnvironment
  • 开关电源中强制连续FCCM模式与轻载高效PSM,PFM模式优缺点对比笔记
  • 5分钟教你用AI把老照片动起来,别再去花49块9的冤枉钱了
  • Ruby 环境变量
  • BPF:BCC工具 funccount 统计内核函数调用(内核函数、跟踪点USDT探针)认知
  • DPO算法推导
  • Qt源码分析:窗体绘制与响应
  • docker 安装 禅道
  • 【简要说说】make 增量编译的原理
  • DETRs Beat YOLOs on Real-time Object Detection论文翻译
  • SpringBoot 多数据源配置
  • RK3568驱动指南|第十六篇 SPI-第192章 mcp2515驱动编写:完善write和read函数
  • #BI建模与数仓建模有什么区别?指标体系由谁来搭建?