Skip to content

面试速答(先看这里)

**一句话结论:**即在Redis中定义频道,客户端可以订阅一个或多个频道并接收它们所发布的消息。

60秒标准回答:

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息

(在Stream推出之后,越来越多人会采用Stream来实现这样的功能了。)

即在Redis中定义频道,客户端可以订阅一个或多个频道并接收它们所发布的消息。发布者向一个或多个频道发布消息,所有订阅该频道的客户端都会收到该消息

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
  • 要点2:(在Stream推出之后,越来越多人会采用Stream来实现这样的功能了。
  • **要点3:**Redis的发布/订阅模式一般用于实时消息传递和事件驱动的应用程序中,例如:
  • **要点4:**Redis的发布/订阅模式有以下优点和缺点:
  • **要点5:**可以通过在不同的客户端上运行相同的订阅命令来实现多个订阅者,它们都会接收到频道中发布的消息。

**记忆锚点:**订阅模式 → Redis → Stream → pub → sub → 一般用于实时消息传递

关键取舍:

  • 不适合高频次的请求:在高频次的请求场景下,发布/订阅模式可能会对性能造成影响,因为每个订阅者都需要对每个发布的消息进行处理。

加分表达:

  • 可以通过在不同的客户端上运行相同的订阅命令来实现多个订阅者,它们都会接收到频道中发布的消息。

追问准备:

  • 围绕「订阅模式」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Redis」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Stream」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

(在Stream推出之后,越来越多人会采用Stream来实现这样的功能了。)

📄 ✅Redis 5.0中的 Stream是什么?

打开文档:✅Redis 5.0中的 Stream是什么?

即在Redis中定义频道,客户端可以订阅一个或多个频道并接收它们所发布的消息。发布者向一个或多个频道发布消息,所有订阅该频道的客户端都会收到该消息。

image.png

Redis的发布/订阅模式一般用于实时消息传递和事件驱动的应用程序中,例如:

  1. 即时通讯:发布/订阅模式可以用于实现即时消息传递应用程序,例如聊天室或社交媒体应用程序。订阅者可以订阅特定频道以接收他们感兴趣的消息,并能够实时更新。

  2. 日志处理:发布/订阅模式可以用于日志处理应用程序,例如日志聚合或日志监控系统。订阅者可以订阅特定频道以接收他们感兴趣的日志消息,例如错误或异常消息,并能够实时更新。

  3. 实时数据更新:发布/订阅模式可以用于实时数据更新应用程序,例如股票市场或在线游戏。订阅者可以订阅特定频道以接收他们感兴趣的实时数据更新,并能够实时更新。

  4. 缓存刷新:发布/订阅模式可以用于缓存刷新应用程序,例如缓存的数据过期时自动更新。当数据被更新时,发布者将消息发布到特定频道,订阅者将接收到消息并更新其本地缓存。

扩展知识 ​

优缺点 ​

Redis的发布/订阅模式有以下优点和缺点:

优点:

  1. 实时性高:发布/订阅模式可以实现实时消息传递,能够提高应用程序的实时性和响应速度。
  2. 灵活性高:发布/订阅模式可以根据需要订阅特定频道,订阅者只会接收他们感兴趣的消息,从而提高了灵活性。
  3. 可扩展性高:发布/订阅模式能够支持多个订阅者同时订阅特定频道,从而提高了可扩展性。

缺点:

  1. 可靠性低:发布/订阅模式是一种异步通信方式,发布者不会等待订阅者接收到消息,因此消息的可靠性可能会受到影响。
  2. 可靠性难以保证:发布/订阅模式在传输过程中可能会出现消息丢失的情况,尤其是在高负载情况下。
  3. 不适合高频次的请求:在高频次的请求场景下,发布/订阅模式可能会对性能造成影响,因为每个订阅者都需要对每个发布的消息进行处理。

用法 ​

具体的实现过程如下:

1、创建并发布消息到一个Redis频道:

plain
redis-cli> PUBLISH channel1 "Hello, world!"

2、客户端订阅渠道的消息

plain
redis-cli> SUBSCRIBE channel1

订阅后,客户端将一直保持订阅状态,直到手动取消订阅或者连接断开。

可以通过在不同的客户端上运行相同的订阅命令来实现多个订阅者,它们都会接收到频道中发布的消息。

Redis发布/订阅模式是异步的,即发布者不会等待订阅者接收到消息。此外,Redis还提供了许多其他功能,例如模式匹配和非阻塞订阅等。