NOTE
2.4 Redis异步队列
1. 什么是异步队列 - 队列:先进先出 - 异步:有缓存区 - 说白了就是带缓冲区的生产者/消费者模型 2. 如何实现异步队列 2.1. rpush+lpop+sleep 一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep
这是历史学习笔记,可能存在过时或不完整的理解。
1. 什么是异步队列
- 队列:先进先出
- 异步:有缓存区
- 说白了就是带缓冲区的生产者/消费者模型
2. 如何实现异步队列
2.1. rpush+lpop+sleep
一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。
2.2. 如果对方追问可不可以不用 sleep 呢?
list 还有个指令叫 blpop,在没有消息的时候,它会阻塞住直到消息到来。
2.3. 如果对方追问能不能生产一次消费多次呢?
使用 pub/sub 主题订阅者模式,可以实现1:N 的消息队列。
2.4. 如果对方追问 pub/sub 有什么缺点?
在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如 RabbitMQ等。
2.5. 如果对方追问 redis 如何实现延时队列?
使用 sortedset,拿时间戳作为score,消息内容作为 key 调用 zadd 来生产消息,消费者用 zrangebyscore 指令获取 N 秒之前的数据轮询进行处理。