这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
缓存策略
场景
新增多个 API 后,缓存策略需要优化。
问题分析:
- 新闻数据:10 分钟更新一次
- 股票数据:实时变化,需要 5 秒缓存
- IP 数据:几乎不变,可以缓存 24 小时
- 天气数据:每小时变化明显
当前问题:
- 所有 API 都使用相同的缓存时间
- 有些数据更新太慢
- 有些数据缓存时间浪费
数据特征分析
按更新频率分类
实时数据(秒级):
- 股票价格
- 汇率
准实时数据(分钟级):
- 新闻列表
- 天气温度
静态数据(小时级):
- IP 归属地
- 城市信息
不变数据(永久):
- 国家列表
- 货币代码
分层缓存策略
L1: 应用内存缓存(最快)
设计流程
L1: 应用内存缓存(最快)
- 步骤 1:读取、刷新或失效缓存数据
- 步骤 2:准备缓存 key、TTL、回源路径和保护策略
- 步骤 3:记录命中率、回源次数和异常 key 分布
- 步骤 4:记录命中率、回源次数和异常 key 分布
关注点:命中率、回源压力、TTL 和异常 key 处理。
L2: Redis 缓存(共享)
设计流程
L2: Redis 缓存(共享)
- 步骤 1:读取、刷新或失效缓存数据
- 步骤 2:准备缓存 key、TTL、回源路径和保护策略
- 步骤 3:记录命中率、回源次数和异常 key 分布
- 步骤 4:记录命中率、回源次数和异常 key 分布
关注点:命中率、回源压力、TTL 和异常 key 处理。
智能缓存策略
策略 1: 热点数据预热
设计流程
策略 1: 热点数据预热
- 步骤 1:写入缓存值、空值标记或热点保护状态
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
策略 2: 缓存穿透保护
设计流程
策略 2: 缓存穿透保护
- 步骤 1:读取、刷新或失效缓存数据
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
策略 3: 缓存雪崩防护
设计流程
策略 3: 缓存雪崩防护
- 步骤 1:写入缓存值、空值标记或热点保护状态
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
按数据类型缓存
股票数据(短期缓存)
设计流程
股票数据(短期缓存)
- 步骤 1:按命中、未命中和异常 key 处理读取与回源
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
新闻数据(中期缓存)
设计流程
新闻数据(中期缓存)
- 步骤 1:按命中、未命中和异常 key 处理读取与回源
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
IP 数据(长期缓存)
设计流程
IP 数据(长期缓存)
- 步骤 1:按命中、未命中和异常 key 处理读取与回源
- 步骤 2:按本节策略读取、写入缓存并处理过期或失效
- 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。
缓存监控
缓存命中率统计
设计流程
缓存命中率统计
- 步骤 1:读取、刷新或失效缓存数据
- 步骤 2:准备缓存 key、TTL、回源路径和保护策略
- 步骤 3:记录命中率、回源次数和异常 key 分布
- 步骤 4:记录命中率、回源次数和异常 key 分布
关注点:命中率、回源压力、TTL 和异常 key 处理。