缓存策略

场景

新增多个 API 后,缓存策略需要优化。

问题分析:

  • 新闻数据:10 分钟更新一次
  • 股票数据:实时变化,需要 5 秒缓存
  • IP 数据:几乎不变,可以缓存 24 小时
  • 天气数据:每小时变化明显

当前问题:

  • 所有 API 都使用相同的缓存时间
  • 有些数据更新太慢
  • 有些数据缓存时间浪费

数据特征分析

按更新频率分类

实时数据(秒级):

  • 股票价格
  • 汇率

准实时数据(分钟级):

  • 新闻列表
  • 天气温度

静态数据(小时级):

  • IP 归属地
  • 城市信息

不变数据(永久):

  • 国家列表
  • 货币代码

分层缓存策略

L1: 应用内存缓存(最快)

设计流程
L1: 应用内存缓存(最快)
  1. 步骤 1:读取、刷新或失效缓存数据
  2. 步骤 2:准备缓存 key、TTL、回源路径和保护策略
  3. 步骤 3:记录命中率、回源次数和异常 key 分布
  4. 步骤 4:记录命中率、回源次数和异常 key 分布
关注点:命中率、回源压力、TTL 和异常 key 处理。

L2: Redis 缓存(共享)

设计流程
L2: Redis 缓存(共享)
  1. 步骤 1:读取、刷新或失效缓存数据
  2. 步骤 2:准备缓存 key、TTL、回源路径和保护策略
  3. 步骤 3:记录命中率、回源次数和异常 key 分布
  4. 步骤 4:记录命中率、回源次数和异常 key 分布
关注点:命中率、回源压力、TTL 和异常 key 处理。

智能缓存策略

策略 1: 热点数据预热

设计流程
策略 1: 热点数据预热
  1. 步骤 1:写入缓存值、空值标记或热点保护状态
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

策略 2: 缓存穿透保护

设计流程
策略 2: 缓存穿透保护
  1. 步骤 1:读取、刷新或失效缓存数据
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

策略 3: 缓存雪崩防护

设计流程
策略 3: 缓存雪崩防护
  1. 步骤 1:写入缓存值、空值标记或热点保护状态
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

按数据类型缓存

股票数据(短期缓存)

设计流程
股票数据(短期缓存)
  1. 步骤 1:按命中、未命中和异常 key 处理读取与回源
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

新闻数据(中期缓存)

设计流程
新闻数据(中期缓存)
  1. 步骤 1:按命中、未命中和异常 key 处理读取与回源
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

IP 数据(长期缓存)

设计流程
IP 数据(长期缓存)
  1. 步骤 1:按命中、未命中和异常 key 处理读取与回源
  2. 步骤 2:按本节策略读取、写入缓存并处理过期或失效
  3. 步骤 3:校验身份、密钥或权限
关注点:命中率、回源压力、TTL 和异常 key 处理。

缓存监控

缓存命中率统计

设计流程
缓存命中率统计
  1. 步骤 1:读取、刷新或失效缓存数据
  2. 步骤 2:准备缓存 key、TTL、回源路径和保护策略
  3. 步骤 3:记录命中率、回源次数和异常 key 分布
  4. 步骤 4:记录命中率、回源次数和异常 key 分布
关注点:命中率、回源压力、TTL 和异常 key 处理。