NOTE

2.4 Redis异步队列

1. 什么是异步队列 - 队列:先进先出 - 异步:有缓存区 - 说白了就是带缓冲区的生产者/消费者模型 2. 如何实现异步队列 2.1. rpush+lpop+sleep 一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep

Redis / Cache创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

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 秒之前的数据轮询进行处理。