一、为什么不用Redis做消息队列
经常听到很多人讨论,关于把 Redis 当作队列来用是否合适的问题。
有些人表示赞成,他们认为 Redis 很轻量,用作队列很方便。
也些人则反对,认为 Redis 会丢数据,最好还是用专业的队列中间件更稳妥。
究竟哪种方案更好呢?
1、Redis中List队列
从最简单的开始:List 队列。首先,我们先从最简单的场景开始讲起,如果你的业务需求足够简单,想把 Redis 当作队列来使用,肯定最先想到的就是使用
List 这个数据类型。因为List底层的实现就是一个链表,在头部和尾部操作元素,时间复杂度都是 O(1),这意味着它非常符合消息队列的模型。
如果把 List 当作队列,你可以这么来用。
生产者使用 LPUSH 发布消息:
127.0.0.1:6379> LPUSH queue msg1 (integer) 1 127.0.0.1:6379> LPUSH queue msg2
(integer) 2
消费者这一侧,使用 RPOP 拉取消息:
127.0.0.1:6379> RPOP queue "msg1" 127.0.0.1:6379> RPOP queue "msg2"
这个模型非常简单,也很容易理解:
但这里有个小问题,当队列中