redis 消息订阅命令

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

1. SUBSCRIBE 命令

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

bash 复制代码
SUBSCRIBE channel1 channel2

2. UNSUBSCRIBE 命令

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

bash 复制代码
UNSUBSCRIBE channel1 channel2

3. PUBLISH 命令

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

bash 复制代码
PUBLISH channel1 "Hello, World!"

4. PSUBSCRIBE 命令

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

bash 复制代码
PSUBSCRIBE news.*

示例

1. 订阅和接收消息

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

bash 复制代码
redis-cli
> SUBSCRIBE channel1

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

2. 发布消息

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

bash 复制代码
redis-cli
> PUBLISH channel1 "Hello, Channel 1!"

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

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

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

bash 复制代码
redis-cli
> PSUBSCRIBE news.*

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

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

bash 复制代码
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 频道
lua 复制代码
local redis = require "resty.redis"
local red = redis:new()

red:set_timeout(1000) -- 1 sec

local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
    ngx.say("failed to connect: ", err)
    return
end

local res, err = red:subscribe("channel1")
if not res then
    ngx.say("failed to subscribe: ", err)
    return
end

while true do
    local res, err = red:read_reply()
    if res then
        ngx.say("received message: ", res[3])
    else
        ngx.say("failed to read reply: ", err)
        break
    end
end
2. 使用 Lua 脚本发布 Redis 消息
lua 复制代码
local redis = require "resty.redis"
local red = redis:new()

red:set_timeout(1000) -- 1 sec

local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
    ngx.say("failed to connect: ", err)
    return
end

local res, err = red:publish("channel1", "Hello, World!")
if not res then
    ngx.say("failed to publish: ", err)
    return
end

ngx.say("message published to channel1")

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

相关推荐
YOU OU4 小时前
Redis基础常识与命令
数据库·redis·缓存
Database_Cool_6 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森6 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_7 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白7 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面8 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧8 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈8 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy8 小时前
log4net 数据库存日志正确配置
数据库