Redis消息队列MessageQueue,存放消息的队列。最简单的消息队列模型包括3个角色消息队列存储和管理消息也被称为消息代理Message Broker生产者发送消息到消息队列消费者从消息队列获取消息并处理消息Redis提供了三种不同的方式来实现消息队列List:基于List结构模拟消息队列PubSub:基本的点对点消息模型Stream:比较完善的消息队列模型基于List结构队列是入口和出口不在一边因此我们可以利用LPUSH结合RPOP、或者RPUSH结合LPOP来实现。不过需要注意当队列中没有消息时RPOP或LPOP操作会返回null并不像JVM的阻塞队列那样会阻塞并等待消息。因此这里应该使用BRPOP或者BLPOP来实现阻塞效果。基于PubSub结构PubSub发布订阅是Redis2.0版本引入的消息传入模型。消费者可以订阅一个或多个channel生产者向对应channel发送消息后所有订阅者都能收到相关消息SUBSCRIBE channel [channel]:订阅一个或多个频道PUBLISH channel msg:向一个频道发送消息PSUBSCRIBE pattern[pattern]:订阅与pattern格式匹配的所有频道基于Stream的消息队列Stream是Redis5.0引入的一种新数据类型可以实现一个功能非常完善的消息队列消费者组将多个消费者划分到一组中监听同一个队列具备以下特点实现异步秒杀下单创建一个Stream类型的消息队列修改之前的秒杀下单Lua脚本在认定有抢购资格后直接在stream.orders中添加消息内容包含voucherId,userId,orderId项目启动时开启一个线程任务尝试获取stream.orders中的消息完成下单