redis的发布订阅缺陷

虽然redis实现了发布订阅(publish/subscribe)的功能,可是在一般的状况下是不推荐使用的,若是想使用消息队列这种功能,最好仍是使用专业的各类MQ中间件,例如rabbitMQ,rockedMQ,activitedMQ等,本文主要讲一下不推荐使用redis的发布订阅功能的缘由。redis

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

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

第二个缘由是和数据传输的可靠性有关。任何网络系统在执行操做时均可能会遇到断网的状况。而断线产生的链接错误一般会使得网络链接两端中的一端进行从新链接。若是客户端在执行订阅操做的过程当中断线,那么客户端将会丢失在断线期间的消息,这在不少业务场景下是不可忍受的。中间件

相关文章
相关标签/搜索