You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对redis++ subscriber进行轮询?现有Pub/Sub方案存问题求指导

Redis++ Pub/Sub 多IO场景优化方案

你的思路完全没问题,这是Redis Pub/Sub结合多IO任务场景下的典型痛点,redis++本身确实没有直接提供这类原生支持,很多开发者都会遇到类似问题。

可行方案分析

  • 暴露hiredis文件描述符做多路复用
    你提到的通过Connection类获取hiredis的fd是完全可行的实现方向,但要注意两个关键细节:

    1. 当Redis连接发生重连(比如网络波动断开后自动重连),hiredis的fd会发生变化,所以需要监听redis++的重连事件,及时更新你用于select/poll的fd集合
    2. 调用redis的消息消费接口前,要确保fd已经就绪,避免阻塞;同时要注意redis的线程安全限制,不要在多个线程同时操作同一个Subscriber或Connection实例
  • 替代方案:非阻塞式检查消息
    如果不想直接操作fd,也可以尝试基于redis++的现有接口做改造:比如自定义一个非阻塞的消费封装,在每次调用subscribe或consume前,先通过底层hiredis的redisBufferRead尝试读取数据,判断是否有就绪消息,但这种方式本质还是绕不开对hiredis底层的操作,复杂度和直接用fd差不多

补充说明

这个需求属于redis++的功能空白区,官方目前没有内置的多路复用支持,所以你的开发思路是合理的,不需要怀疑自己。只要处理好重连后的fd更新和线程安全问题,就能解决现有方案的两个痛点。

内容的提问来源于stack exchange,提问作者Wouter ibens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:39:53