Redis发布订阅实战指南,监听与实现全解析,你更想了解哪种应用场景?

文章导读
在Redis中,发布订阅(Pub/Sub)是一种消息传递模式,非常适合实时通知、聊天室和事件驱动的应用场景。以下是完整实现教程:首先,使用SUBSCRIBE命令监听频道:redis-cli SUBSCRIBE mychannel。然后发布消息:PUBLISH mychannel "Hello World"。实战代码示例(Python):import redis; r = redis.Redis()
📋 目录
  1. A 基础实现步骤
  2. B 聊天室应用场景
  3. C 实时通知场景
  4. D 事件驱动架构
  5. E 监听高级技巧
  6. F 实战代码全解析(Node.js)
  7. G FAQ
A A

在Redis中,发布订阅(Pub/Sub)是一种消息传递模式,非常适合实时通知、聊天室和事件驱动的应用场景。以下是完整实现教程:首先,使用SUBSCRIBE命令监听频道:redis-cli SUBSCRIBE mychannel。然后发布消息:PUBLISH mychannel "Hello World"。实战代码示例(Python):import redis; r = redis.Redis(); p = r.pubsub(); p.subscribe('mychannel'); for message in p.listen(): print(message['data'].decode()). 常见应用场景包括实时聊天、库存警报和用户通知,你更想了解聊天室还是通知系统?

基础实现步骤

Redis Pub/Sub的核心是channel,订阅者用SUBSCRIBE channel监听,发布者用PUBLISH channel msg发送。监听实现:客户端连接后执行SUBSCRIBE,收到消息自动触发回调。完整解析:1. 启动订阅:pubsub.subscribe('news'); 2. 发布:r.publish('news', '最新消息'); 3. 退订:pubsub.unsubscribe(). 实战中常用于解耦服务。

聊天室应用场景

在聊天应用中,创建频道如room1,用户订阅room1频道。私聊用用户ID频道。代码:发布方 r.publish('room1', json.dumps({'user':'Alice', 'msg':'hi'})); 监听方解析JSON显示。优点:简单高效,支持多房间,无需复杂服务器逻辑。缺点:消息不持久化,重连丢失历史。

实时通知场景

电商库存警报:订阅'product_stock'频道,当库存低于阈值时PUBLISH。用户端订阅后收到推送。实现:后台服务监控库存,r.publish('stock:123', 'low_stock'); 前端WebSocket桥接Redis Pub/Sub。适合秒杀、价格变动通知。

事件驱动架构

微服务间用Pub/Sub解耦:订单服务PUBLISH 'order.created',库存服务SUBSCRIBE处理扣减。模式图:Publisher -> Redis Channel -> Subscribers。扩展:用PATTERN订阅多个频道,如SUBSCRIBE news.*。

监听高级技巧

PSUBSCRIBE 'user.*' 通配符监听所有用户频道。NUMSUB channel 查询订阅数。监听回调处理:while True: msg = pubsub.get_message(); if msg: handle(msg)。生产环境用连接池避免阻塞。

Redis发布订阅实战指南,监听与实现全解析,你更想了解哪种应用场景?

实战代码全解析(Node.js)

const redis = require('redis'); const sub = redis.createClient(); sub.subscribe('events'); sub.on('message', (channel, message) => { console.log(`收到 ${channel}: ${message}`); }); const pub = redis.createClient(); pub.publish('events', '新事件');

FAQ

Q: Redis Pub/Sub消息持久化吗?
A: 不持久化,断开丢失,重连需重新订阅。

Q: 订阅者离线如何处理?
A: 用LIST或Stream代替,或结合消息队列持久化。

Q: 性能如何?
A: 单频道支持10万+订阅,高吞吐,内存友好。

Q: 安全吗?
A: 加ACL认证频道,用密码保护实例。