redis也可以实现队列,为啥还要用rabitmq或者kafka
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis也可以实现队列,为啥还要用rabitmq或者kafka相关的知识,希望对你有一定的参考价值。
抛开业务场景谈这些组件的选择就是耍流氓。 负载不大,可靠性要求不高,没有扩容需求的情况下自然都一样,甚至就像之前说的,不用redis,就写文件都行,往某个文件夹里写个文件=>入队,拿出来删掉=>出队至于ack啊,分布式啊,抗压啊等等各种问题,redis基本没有现成解决方案,有的可以自己变通解决,有的就是解决不了,所以才会有各种各样的专业队列组件,有的注重速度,有的注重分布式,有的注重可靠性,他们都会试图解决redis解决不了的一些问题。就好像你磁盘写文件当key-value用,IO的速度自然成为瓶颈,负载能力上不去,所以才会有专业的redis来做内存的kv 参考技术A redis只是提供一个高性能的、原子操作的分布式队列实现。具体的业务还是得需要你自己定制。你的需求实际上是一个变形的生产者-消费者实现。对于此类需求,主要是将请求和实际的处理过程解耦,一般都是采取异步的方式来通知请求方,这跟用不用redis其实没有多大的关系。一般的实现方法是你需要将用户的请求封装成一个Task,然后将这个Task再push到redis队列,然后后端的worker.php完全可以多进程、多线程的并发处理Task并将处理结果回调给请求方。这里唯一麻烦点的就是这个Task的设计,需要能够包含请求信息(请求内容,请求方标识等等).
Redis学习笔记~实现消息队列比MSMQ更方便
什么是队列:简单的说就是数据存储到一个空间里(可以是内存,也可以是物理文件),先存储的数据对象,先被取出来,这与堆栈正好相反,消息队列也是这样,将可能出现高并发的数据进行队列存储,并按着入队的顺序依次处理,实现消息队列的工具有很多,如微软的MSMQ,及一些开源的KV存储工具,今天主要介绍用Redis实现消息队列。
这是我的redis项目结构
redis服务有一个console的程序,可以支持在windows和linux下运行。
我用MVC应用程序来作这个例子,由表单向内存中写信息,然后每5秒中从内存中将消息取出来,看代码
/// <summary> /// 消息对象类型 /// </summary> public class MessageQuene { static System.Timers.Timer timer = new System.Timers.Timer(5000); public static ChatModels CurrentChatModels = new ChatModels(); static Redis.Utils.RedisClient redisClient; static MessageQuene() { redisClient = new Redis.Utils.RedisClient(); timer.AutoReset = true; timer.Enabled = true; timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);//subscribe a event timer.Start(); } private static void timer_Elapsed(object sender, ElapsedEventArgs e) { CurrentChatModels = (ChatModels)redisClient.LeftPop("MessageQuene"); } }
前台显示的action
public ActionResult Index() { ViewData["pop"] = MessageQuene.CurrentChatModels == null ? "没?有D记?录?" : MessageQuene.CurrentChatModels.Chat; ViewData["MSMQ"] = redisClient.ListRange("MessageQuene") == null ? new List<ChatModels>() : redisClient.ListRange("MessageQuene").Cast<ChatModels>().ToList();
}
表单提交的action
事件上,如果我们在项目中用到消息队列时,可以直接使用ViewData["pop"]这个对象,它就是当前取出的队列元素,我们可以对它进行数据操作等。
以上是关于redis也可以实现队列,为啥还要用rabitmq或者kafka的主要内容,如果未能解决你的问题,请参考以下文章