`
tcspecial
  • 浏览: 911562 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

无法收到redis订阅消息

阅读更多

    现网程序运行一段时间后,经常发现收不到redis订阅消息。输入client list查询redis连接信息,输出如下信息:

id=2375018 addr=120.15.207.135:9159 fd=663 name=subarea age=3324 idle=563 flags=N db=0 sub=0 psub=1 multi=-1 qbuf=0 qbuf-free=0 obl=16382 oll=797 omem=12734654 events=rw cmd=psubscribe

 

    其中两个关键字段 idle=563 连接空闲563s,按理说不可能空闲,因为对端在不停发消息。继续查看 omem=12734654,输入缓冲区内存占用竟然达到12G。服务器内存被耗尽,不再向客户端发布消息。

 

    看看redis.conf配置项:

client-output-buffer-limit pubsub 32mb 8mb 60   #当缓冲区数据达到硬限制32M时,连接会关闭;当缓冲区数据达到软限制每60秒8M时,连接也会关闭。
client-output-buffer-limit pubsub 0 0 0         #可将hard limit和soft limit同时置0,关闭该限制。该操作官方不推荐。

 

    经排查发现上述问题是由于关闭了订阅/发布输出缓冲区内存限制,程序操作阻塞,没有及时取走发布的消息,导致消息在服务端不断缓存,最终耗尽服务端内存,客户端无法接收到订阅消息。

    解决方案: 将订阅消息读取到本地队列中,防止阻塞订阅消息的读取;单独启动一线程扫描队列消息即可。

分享到:
评论

相关推荐

    Java实现Redis的消息订阅和发布

    在这一模式下,Redis服务器作为消息的中间人,允许多个客户端(订阅者)订阅特定的主题,当有发布者向该主题发布消息时,所有订阅了该主题的客户端都会收到消息。这种模式提供了一种轻量级的通信方式,适合实时通知...

    redis消息订阅发布

    - **订阅者必须在线**:订阅者只有在连接到Redis服务器时才能接收到消息,一旦断开连接,就无法接收到在此期间发布的消息。 - **消息的顺序性**:Redis不保证消息的顺序性,订阅者可能按照不同的顺序接收到消息。 ...

    redis绑定webSocket发布订阅连接推送

    5. **WebSocket消息推送**:WebSocket服务器收到Redis的消息后,将其转发给已连接的客户端。 6. **前端实现**:前端使用WebSocket API建立连接,订阅WebSocket服务器的事件,接收到消息后更新UI展示任务状态。 **...

    redis发布订阅小案例

    当消息发布后,所有订阅了"myChannel"的客户端(包括这个示例中的`subscriber`)都会收到并打印出消息。 此外,Redis的发布订阅功能还支持通配符订阅,例如`*`代表任意字符,`#`代表零个或多个任意字符。这使得我们...

    基于netcore 3.0的redis发布订阅示例代码

    发布/订阅是Redis的一个重要特性,它允许应用程序以广播消息的方式进行通信,订阅者可以监听特定频道并接收发送到该频道的消息。以下是一个简单的.NET Core 3.0应用,展示了如何使用StackExchange.Redis创建发布者和...

    redis订阅与发布.zip

    这个项目可能包含了启动 Redis 客户端,订阅频道,以及处理收到的订阅消息的示例。 2. **SMSForm** 和 **OrderForm**:这两个文件名暗示了可能有两个不同的应用场景,比如 SMSForm 可能是处理短信通知的界面或服务...

    C# Redis发布与订阅系统源码

    当数据库中的数据发生变化时,可以通过发布消息到特定的频道,然后所有订阅该频道的客户端都会收到这个消息,并据此更新自己的数据缓存。 使用C#与Redis交互时,首先需要安装StackExchange.Redis NuGet包。以下是一...

    Redis 发布订阅 Demo

    发布订阅模式允许消息生产者(Publisher)发送消息到特定的频道(Channel),而多个消息消费者(Subscriber)可以订阅这些频道,一旦有新消息发布,所有订阅了该频道的消费者都会收到通知。这种模式实现了点对多的...

    Redis在Delphi7下使用,支持发布、订阅等

    `uTerminalFrm`可能是一个用户界面,用于显示和交互Redis操作,如发布消息、订阅频道等。`.ddp`是Delphi工程的项目文件,`.dfm`包含表单的布局信息,而`.pas`则包含对应的源代码。 3. NsyRedis.dof 和 RedisClient....

    websocket-redis长连接订阅日志频道

    此外,Redis 还提供了发布/订阅(pub/sub)模式,允许多个客户端订阅特定的主题,当有新的消息发布到该主题时,所有订阅者都会收到通知。这种模式非常适合构建实时消息系统。 在这个“websocket-redis长连接订阅...

    利用redis广播消息更新集群环境下本地缓存

    如何做到多节点缓存同步呢,可使用redis消息队列广播功能,使用Redis订阅一个主题,注册监听,当有数据变更的时候往这个主题发布一个消息,集群中的各个节点都会收到这个消息执行本地缓存的更新操作。

    基于Java环境下的Redis发布订阅的设计与实现.pdf

    然后,设计实现Redis发布订阅功能过程,如图1所示,包括建立发布者Publisher类、订阅者Subscriber类和消息监听类。 三、实现Redis发布订阅功能的步骤 1. 建立发布者Publisher类,通过频道(mychannel)发布消息。 ...

    redis和redisdesktop

    6. **发布/订阅**:Redis的pub/sub(发布/订阅)模式可以实现消息传递,让多个客户端订阅同一个主题,当有新消息发布时,所有订阅者都能收到。 接下来,我们讨论RedisDesktop工具的使用: 1. **界面友好**:Redis...

    Redis中使用Java代码的方式实现发布订阅流程-发布者示例代码.zip

    在Redis中,发布/订阅(Publish/Subscribe,简称Pub/Sub)是一种消息通信模式,它允许消息生产者(发布者)发送消息到一个频道,而多个消息消费者(订阅者)可以实时接收这些消息。这个功能在分布式系统中尤其有用,...

    Redis发布订阅和实现.NET客户端详解

    Redis的发布/订阅(Publish/Subscribe)功能是其核心特性之一,它允许消息从一个源头广播到多个接收者,这种模式常被用于实时消息传递、通知系统或者构建解耦的组件。发布订阅在设计模式中可以类比为观察者模式,它...

    MQ redis测试工具

    在消息传递场景中,Redis的发布/订阅(pub/sub)模式特别有用,允许多个订阅者监听特定频道,一旦有消息发布到该频道,所有订阅者都会收到通知。 MQ redis测试工具就是为了解决开发者在测试这些系统集成时的痛点。...

    redisredis redis redis redis

    5. **发布/订阅**:Redis 的 Pub/Sub(发布/订阅)模型允许客户端订阅特定频道,当有消息发布到这些频道时,所有订阅者都会收到消息,适合实现消息通知和异步通信。 6. **Lua 脚本**:Redis 支持内嵌 Lua 脚本执行...

    redis面试题之消息队列.zip

    - **发布/订阅(Pub/Sub)模式**:Redis提供了简单的消息发布订阅功能,允许一个或多个客户端订阅特定的频道,当有其他客户端向该频道发布消息时,所有订阅者都会收到消息。这种模式适用于广播消息,但不具备消息...

    Qt封装Redis接口

    `publish`方法用于发布消息到指定频道,所有订阅该频道的客户端都会收到消息。这样,就可以实现实时的多对多通信场景,例如聊天室或通知系统。 在实际应用中,为了保证连接的稳定性和数据的完整性,`QRedis`类可能...

    redis7的离线安装包

    10. **发布/订阅功能**:Redis的发布订阅(pub/sub)模式允许消息传递,订阅者可以订阅特定的频道,当有消息发布到这些频道时,订阅者将收到通知。这是一种有效的异步通信机制。 11. **内存管理**:Redis主要在内存...

Global site tag (gtag.js) - Google Analytics