缓存旁路模式是一种常见的缓存策略,适用于需要灵活控制缓存与数据库一致性的场景。其核心思想是:缓存与数据库各自独立,数据读取时优先查缓存,写入时先更新数据库再刷新缓存。
📌 核心流程
读取数据
- 先检查缓存是否存在目标数据
- 若存在:直接返回缓存结果
- 若不存在:从数据库加载数据并写入缓存
- 📌 示例:
GET /api/data/123
时先查缓存,未命中则从数据库读取
写入数据
- 先更新数据库
- 再将新数据写入缓存
- 📌 示例:
POST /api/data
时先修改数据库,再同步缓存
刷新缓存
- 当数据变更时主动清除缓存
- 通过
DELETE /api/data/123
触发缓存失效
🧠 使用场景
- 需要实时数据更新但又不希望缓存成为瓶颈
- 数据一致性要求较高的系统(如订单状态、用户信息)
- 避免缓存雪崩(Cache Snowflake)的场景
- 与数据库强一致性需求结合使用
⚠️ 注意事项
- 缓存失效时间需合理设置,避免数据不一致
- 并发写入时需加锁防止脏读(如使用Redis的
SETNX
) - 缓存穿透可通过空值缓存(如
null
)解决 - 缓存击穿可采用互斥锁或永不过期策略
📌 代码示例(伪代码)
def get_data(key):
if cache.exists(key):
return cache.get(key)
else:
data = db.query(key)
cache.set(key, data)
return data
def update_data(key, value):
db.update(key, value)
cache.set(key, value)
📌 扩展阅读
想深入了解其他缓存策略?可以查看 缓存策略全解析 🚀
或学习如何避免缓存雪崩:缓存雪崩解决方案 ❄️