`
tcspecial
  • 浏览: 896181 次
  • 性别: 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,关闭该限制。该操作官方不推荐。

 

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

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

分享到:
评论

相关推荐

    redis订阅,redis发布

    redis开启服务后,用付服务端发送订阅,客户端将实时收到数据。

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

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

    Dubbo-Redis安装教程

    使用 Redis 的 Key/Map 结构存储数据结构: -主 Key 为服务名和类型 - Map 中的 Key 为 URL 地址 - Map 中的 Value 为过期时间,用于判断脏数据,脏数据由监控中心删除。 通过事件的值区分事件类型:register, ...

    dtalk(Device Talk)基于Redis发布订阅(pub/sub)系统实现的前端设备控制框架(java)

    dtalk就是为了实现上述的目标而开发的一个Redis发布订阅(pub/sub)系统实现的前端设备控制框架,在dtalk框架上,Redis服务器用于提供中转服务。前端设备通过订阅特定的频道接收管理发送的请求消息,执行对应的功能。...

    Redis 用法

    -在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个 key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。 这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等...

    redis发布订阅_动力节点Java学院整理

    其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个场景还能找到...

    redux:R的Redis客户端

    通过object_to_bin / bin_to_object支持二进制序列化,它们是serialize /反unserialize精简包装subscriptions :创建一个简单的阻止订阅客户端,将回调函数应用于收到的每条消息。 错误处理:每个Redis错误都会变成...

    graphql-redis-subscriptions:使用redis和apollo的graphql-subscriptions的graphql订阅实现

    它允许您将订阅管理器连接到Redis Pub Sub机制,以支持多个订阅管理器实例。 安装 首先,安装graphql-redis-subscriptions软件包: npm install graphql-redis-subscriptions 由于软件包被声明为对等依赖项,如果...

    circumambient:将请求的详细信息发布到 redis 的简单 Web 代理

    现在,对 localhost:3002 的任何请求都将传递到 localhost:3001,并且任何在“请求”频道上侦听的 redis 订阅者* 都会收到以下消息: { " method " : " ... " , " url " : " ... " , " headers " : { }, " ...

    RedisPubSubGUI:Redis PubSub侦听器GUI

    还有另一个“ Clear按钮,可帮助从Redis通道中删除和清除收到的消息。 您可以找到“ Up / Down按钮,这些按钮可帮助您增加或缩小控制台的字体。设定值Eye Button ,它可以帮助您跟踪控制台日志并上下滚动,而无需...

    node-broadcast-hub:由 Redis pubsub 支持的 WebSockets

    订阅后,他们将收到发布到该频道的任何消息。 它能做什么: 提供所需的 Websocket 处理(基于 )。 提供用于订阅广播频道的客户端库。 使用作为pubsub机制来实现可扩展性。 允许对客户端和单个通道进行身份验证。 ...

    ewf:firebase 和另一个消息队列(目前是 Redis)之间的桥梁

    用法客户端通过订阅 Redis 上的路径/事件来订阅 Firebase 路径例如: SUBSCRIBE child_added:my/data 客户端将 firebase 路径作为字符串发布到 redis 上的firebase-通道这会通知守护进程它应该订阅来自 firebase 的...

    channel:工人的进程间通信组件

    基于订阅的多进程通讯组件,用于workerman进程间通讯或者服务器集群通讯,类似redis订阅发布机制。基于workerman开发。 Channel 提供两种通讯形式,分别是发布订阅的事件机制和消息队列机制。 它们的主要区别是: ...

    Java版水果管理系统源码-ranking-practice:redis排行榜项目

    Java版水果管理系统源码 Online-payment-project-Practice redis基础与在线支付项目实战 Redis基础知识 基础命令多实践足矣,在此只总结一下探究性...返回收到消息的客户端数量 SUBSCRIBE订阅给指定频道的信息 UNSUBSCRT

    uwsgi-sse-offload:uWSGI 卸载 redis pubsub 和服务器发送事件之间的桥接 (sse)

    网桥在 redis pubsub 通道上等待,每当它收到消息时,它就会将其转发给连接的 sse 客户端。 它是一个卸载引擎,因此您可以管理数千个并发请求,而不会打扰您的工作人员/线程/异步核心 这个怎么运作 客户端(阅读:...

    RHSR-TO-DO:探索之日!

    然后,服务器上的套接字会收到此消息,然后redis pub客户端会将其发布到所有订阅服务器,每个订阅服务器共享相同的redis数据库。 然后,它们使用其套接字发出消息,并且客户端在那里接收消息。 这是骚乱领域唯一的...

    LostAndFoundOnCampus::backhand_index_pointing_right:基于微信小程序的校园失物招领平台,提供OCR识别证件、失物招领消息订阅、web后台可视化数据管理等

    失物招领信息一览/关键字检索信息发布(支持图片上传)OCR证件识别(免输入)证件消息订阅(监听自己遗失的证件信息,及时收到小程序通知)阿里云短信验证码项目技术栈 :star:小程序: Vue/Uni-app/微信小程序后端: Java/...

    MySQL高频面试题大汇总

    canal是阿里巴巴旗下的一款开源项目,基于数据库增量日志解析,提供增量数据订阅&消费。 canal的原理如下: 1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 2. 3. mysql ...

    wechat-notification:通过微信公众号, 将通知信息推送至个人微信. 无需认证公众号, 可群发

    无需认证公众号, 可群发.v1.0 版本, 支持用户主动订阅 / 退订推送消息, 因稳定性低, 应用场景少, 不再继续维护.代码和文档统一移至 listener-mode 目录下.DEMOsettings.py配置 redis, 微信连接信息.执行获取微信...

    TEST_ABHIROY

    自用户发送上一条消息以来收到的消息总数 设置 安装Ruby 2.7.1 gem install bundler bundle install cp .env .env.development bundle exec rails db:create RAILS_ENV=development bundle exec rails db:...

Global site tag (gtag.js) - Google Analytics