缓存旁路模式是一种常见的缓存策略,适用于需要灵活控制缓存与数据库一致性的场景。其核心思想是:缓存与数据库各自独立,数据读取时优先查缓存,写入时先更新数据库再刷新缓存

📌 核心流程

  1. 读取数据

    • 先检查缓存是否存在目标数据
    • 若存在:直接返回缓存结果
    • 若不存在:从数据库加载数据并写入缓存
    • 📌 示例:GET /api/data/123 时先查缓存,未命中则从数据库读取
  2. 写入数据

    • 先更新数据库
    • 再将新数据写入缓存
    • 📌 示例:POST /api/data 时先修改数据库,再同步缓存
  3. 刷新缓存

    • 当数据变更时主动清除缓存
    • 通过 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)

📌 扩展阅读

想深入了解其他缓存策略?可以查看 缓存策略全解析 🚀
或学习如何避免缓存雪崩:缓存雪崩解决方案 ❄️

缓存_旁路_模式
缓存_与_数据库_交互流程