redis也可以实现队列,为什么还要用rabitmq或者kafka?

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

阅读 23.5k
8 个回答

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

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

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

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

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

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

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

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

术业有专攻

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏