redis的发布订阅缺陷

原创
2019/06/22 11:37
阅读数 4.1W

虽然redis实现了发布订阅(publish/subscribe)的功能,但是在通常的情况下是不推荐使用的,如果想使用消息队列这种功能,最好还是使用专业的各种MQ中间件,例如rabbitMQ,rockedMQ,activitedMQ等,本文主要讲一下不推荐使用redis的发布订阅功能的原因。

概要说一下就是,PUBLISH和SUBSCRIBE的缺陷在于客户端必须一直在线才能接收到消息,断线可能会导致客户端丢失消息,除此之外,旧版的redis可能会由于订阅者消费不够快而变的不稳定导致崩溃,甚至被管理员杀掉

第一个原因是和redis系统的稳定性有关。对于旧版的redis来说,如果一个客户端订阅了某个或者某些频道,但是它读取消息的速度不够快,那么不断的积压的消息就会使得redis输出缓冲区的体积越来越大,这可能会导致redis的速度变慢,甚至直接崩溃。也可能会导致redis被操作系统强制杀死,甚至导致操作系统本身不可用。新版的redis不会出现这种问题,因为它会自动断开不符合client-output-buffer-limit pubsub配置选项要求的订阅客户端

第二个原因是和数据传输的可靠性有关。任何网络系统在执行操作时都可能会遇到断网的情况。而断线产生的连接错误通常会使得网络连接两端中的一端进行重新连接。如果客户端在执行订阅操作的过程中断线,那么客户端将会丢失在断线期间的消息,这在很多业务场景下是不可忍受的。

展开阅读全文
打赏
0
0 收藏
分享
加载中
我现在就遇到了这个问题 用php常驻进程去订阅redis 早上起了一个进程 过了一个晚上 第二天早上来看就莫名其妙退出了 查了很久 也不知何解 实在不行 只能换其他中间件了
07/08 15:58
回复
举报
二两豆腐博主
对,不要使用redis的发布订阅,redis的发布订阅是为了它自己内部使用的,要是有这方面的需求可以采用mq之类的中间件
08/20 13:58
回复
举报
更多评论
打赏
2 评论
0 收藏
0
分享
返回顶部
顶部