第六部分导读 · 缓存与队列
查询越来越慢、发邮件拖住了请求、一件事要通知好几个服务,这些问题常常不用再加数据库解决。这一部分讲 Redis 做缓存、锁和排行榜,讲消息队列(message queue)怎么把慢活和通知从请求里拿出去,再分别讲 RabbitMQ 与 Kafka:前者处理完就删,后者按时间保留、可以重读。
要做什么,用哪个
Section titled “要做什么,用哪个”| 我要做什么 | 用哪个 | 详见 |
|---|---|---|
| 给慢查询加缓存,设过期时间 | Redis(Cache-Aside) | 第 25 章 25.4 |
| 做排行榜、计数器或分布式锁 | Redis | 第 25 章 25.4 |
| 验证码、会话到点自动失效 | Redis 的 SET k v EX 秒数 |
第 25 章 25.3 |
| 不确定该用哪种队列 | 按需求对照表选 | 第 26 章 26.4 |
| 发邮件、生成报表这类每个任务做一次 | RabbitMQ | 第 27 章 27.4 |
| 订单、点击事件给多个服务各读一份,要能重读 | Kafka | 第 28 章 28.4 |
| 已经有 Redis,量不大,要确认和重投 | Redis Streams,并设 maxmemory-policy noeviction |
第 26 章 26.4 |
| 消息可能重复投递,消费者要不出错 | 让消费者幂等 | 第 26 章 26.4 |
- 第 25 章 Redis:五种数据结构、过期、持久化与淘汰,以及缓存、分布式锁和排行榜的写法。
- 第 26 章 消息队列总览:队列的基本概念,Redis Streams、RabbitMQ、Kafka 的对照与选型。
- 第 27 章 RabbitMQ:交换机、队列与绑定,管理界面操作,死信队列和积压排查。
- 第 28 章 Kafka:主题与分区、消费者组和偏移量,按键分区让消息有序。