redis可以redis做消息队列入库吗

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式。利用redis这两种场景的消息队列都能够实现。定义:
生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有。
发布者订阅者模式:发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息应该都是一样的。
那么如此多的MQ产品,为什么要使用redis作消息队列呢?以下附上一份总结了别人的一些report或blog的表格,以及当初用来说服整个team的一句结论。
Disadvantage
difficult for development
Low performance
Low performance while enqueuing big data (&= 10k)&
Redis is easy to use and configure since we have experience in Redis, and most importantly, its performance satisfies our requirement.
Then, how to use redis as a MQ?
首先,redis的队列实际在代码逻辑中不需要由我们自己实现,因此一个所谓的 RedisMQ 对象实际是一个 redis key以及对其操作的一些封装。
PubSub Mode:
redis 从 2.0.0 版本开始支持 pub/sub 指令。详情见&
实现思想很简单,Publisher调用redis的publish方法往特定的channel发送消息,Subscriber在初始化的时候要subscribe到该channel,一旦有消息就会立即接收。
比较简单的demo可参见:&,此链接博客中写得已较详细,本文便不再赘述。
Producer/Consumer Mode:
该方法是借助redis的list结构实现的。
Producer调用redis的lpush往特定key里塞入消息,Consumer调用brpop去不断监听该key。
producer:
1 // producer code
2 String key = "demo:mq:test";
3 String msg = "hello world";
4 redisDao.lpush(key, msg);
1 // consumer code
2 String key = "demo:mq:test";
3 while (true) {
// block invoke
List&String& msgs = redisDao.brpop(BLOCK_TIMEOUT, listKey);
if (msgs == null) continue;
String jobMsg = msgs.get(1);
processMsg(jobMsg);
当有多个consumers的时候,它会按照brpop调用的顺序分派消息,并非随机。
BLOCK_TIMEOUT不建议设成infinity(有些redis驱动也直接不支持inifinity),我们目前设成30(单位是秒)情况良好。
P.S. 本文时间较久远,适合redis 2的版本,不保证redis自己会不会有其他新特性 ;同时消息队列产品有很多种,这里列的只是早年常用的,近两三年的kafka和阿里的rocketmq也很火,至于怎么选择,一部分是根据数据量,若数据量不大,容错要求不是极高,redis是个高效开发易维护的好选择;如果数据量很大或对消息准确性有一定要求,那应当考虑更成熟的消息队列产品比如kafka等。所以mq的选型并不是本文的重点,本文只是介绍一下基于redis 2.6的mq的简单封装实现。
阅读(...) 评论()1,044被浏览122,844分享邀请回答20025 条评论分享收藏感谢收起151 条评论分享收藏感谢收起其他回答(1)
这个不是消息队列,也不建议用消息队列。
园豆:2442
园豆:2442
清除回答草稿
&&&您需要以后才能回答,未注册用户请先。Redis的消息队列使用简单,没有什么] [message],如【代码2
Redis的消息队列使用,redis是通过服务器的文件事件来操作的,不单单是消息队列功能,所有 ...
我们需要从其他地方获取redis的消息队列,格式为json ...
Redis的消息队列使用简单,没有什么配置,比ActiveMQ] [message],Redis的消息队列使用简单,没有什么配置,比。
**发送消息**
发布一条信息,redis服务器会执行2个操作 ...
浏览:1918
这里我使用Redis的发布、订阅功能实现简单的消息队列,基本的Redis的发布、订阅功能实现简单的消息队列,基本的命令有publish封装成字符串进行处理。
使用Redis实现消息队列 ...
浏览:2988
使用redis怎么做消息队列
redis能做消息队列得益于他list对象blpop brpop接口;
redis消息队列优先级的实现
一些基础redis基础知识的 ...
,影响写数据。
## 二:redis存储数据形成消息队列;
## 三:数据定时批量入库。
定时读取redis消息队列里面的)】
- 问题二:批量入库就需要有高并发的消息队列,决定采用 ...
浏览:3805
【实战】基于Nginx、Node.js和Redis的服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表NoSQL体系中的Redis技术的原理及实践经验有所帮助。2018 ...
获取元素。
图2-21 Redis消息队列模型介绍。
2.4.3 使用场景
1.?消息队列
如图2-21所示,Redis的lpush+brpop命令组合即可实现阻塞队列 ...
: Memcache, Redis
消息队列: Kafka
分布式缓存: Memcache, Redis ...
Elasticsearch或Redis消息队列&
4. &hello&
#消息的具体内容 ...
运行一个 MySQL 数据库,或者一个 Redis 消息队列,那么 ...
Memcached);除此之外,还可以把Redis当做一个轻量级的消息队列Memcached);除此之外,还可以把Redis当做一个轻量级的消息.google.com/p/redis/downloads/list ...
浏览:1063
Memcached);除此之外,还可以把Redis当做一个轻量级的消息队列Memcached);除此之外,还可以把Redis当做一个轻量级的消息.google.com/p/redis/downloads/list ...
浏览:1004
可以利用lists来实现一个消息队列,而且可以确保先后顺序,不必像设置同步队列长度。队列长度(backlog)是主redis中的一个到从redis,那么缓冲队列中的数据将被清理掉。我们可以设置主 ...
lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL度。队列长度(backlog)是主redis中的一个缓冲区,在与redis,那么缓冲队列中的数据将被清理掉。我们可以设置主redis要 ...
浏览:2758
lists来实现一个消息队列,而且可以确保先后顺序,不必像MySQL度。队列长度(backlog)是主redis中的一个缓冲区,在与redis,那么缓冲队列中的数据将被清理掉。我们可以设置主redis要 ...
浏览:1426
:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的)发送消息,订阅者(sub)接收消息。
Redis 发布订阅(pub/sub)实现了消息系统,发送者(在redis术语中称为发布者 ...
个用例如缓存,消息,队列使用(Redis原生支持发布/订阅,HyperLoglogs
能够作为队列使用
备注:redis是单线程它们。由该消息传送的链路被称为通道。
在Redis客户端可以订阅 ...
工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持(用户)接收它们。由该消息传送的链路被称为通道。 在Redis客户,并且以上订阅客户端接收消息。 redis 127.0.0.1 ...
共有3020页
你可能感兴趣他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 redis 怎么做消息队列 的文章

 

随机推荐