php - redis也可以实现队列,为什么还要用rabitmq或者kafka?
PHP中文网
PHP中文网 2017-04-10 15:41:17
[PHP讨论组]

如题。你们的队列是怎么用?
我是这么用的,一个生产,然后后台跑了crontab定时跑队列里面的内容。这个是我面试的时候面试官问我的,他就对我说你这么用不对,队列不是这么用,他说你要用crontab跑队列,哪和用数据库做个队列没啥区别。但我确实是这么用,我又没好意思问他怎么才是对的。。。。各位种大神你们是怎么用的啊?

PHP中文网
PHP中文网

认证0级讲师

全部回复(7)
PHP中文网

直接写文件也能实现key-value啊,为什么还要redis?

抛开业务场景谈这些组件的选择就是耍流氓。 负载不大,可靠性要求不高,没有扩容需求的情况下自然都一样,甚至就像之前说的,不用redis,就写文件都行,往某个文件夹里写个文件=>入队,拿出来删掉=>出队

至于ack啊,分布式啊,抗压啊等等各种问题,redis基本没有现成解决方案,有的可以自己变通解决,有的就是解决不了,所以才会有各种各样的专业队列组件,有的注重速度,有的注重分布式,有的注重可靠性,他们都会试图解决redis解决不了的一些问题。就好像你磁盘写文件当key-value用,IO的速度自然成为瓶颈,负载能力上不去,所以才会有专业的redis来做内存的kv

PHP中文网

redis内存中实现队列,持久化不是强项,专门的MQ实现更可靠。redis的缓存功能是它的专长,没有好坏,只有更合适。

巴扎黑

我知道一种实现方式是:用一个阻塞队列候着,一有消息就弹出。

我自己是用socket.io实现的消息队列。

PHP中文网

redis实现的是简单的队列,而且没有持久化,负载均衡可以说是没有(一个KEY不可能放到多台服务器)。这方面专门的MQ产品还是做到好些。

PHP中文网

术业有专攻

PHPz

发布/订阅模式
订阅者只需要注册自己,当有消息到来的时候,订阅者会收到通知,所以不需要去轮询。

ringa_lee

其实这么说的话,用 memcache 实现消息队列,有时,也挺方便的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号