首页/数据/数据库速查/Cache Aside 缓存模式(旁路缓存)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条
Redis 运维与场景124 条

Cache Aside 缓存模式(旁路缓存)

最主流的缓存用法:读时先查缓存、未命中查库回填;写时先写库、再删除缓存。删除而非更新缓存是避免并发写覆盖的关键。

数据库速查数据更新于 2026-10-12

伪代码流程

伪代码流程
# 读
def get_user(uid):
    v = redis.get(f'user:{uid}')
    if v is None:
        row = db.query(uid)          # 未命中查库
        redis.set(f'user:{uid}', json.dumps(row), ex=300)
        return row
    return json.loads(v)

# 写
def update_user(uid, data):
    db.update(uid, data)             # 1) 先写库
    redis.delete(f'user:{uid}')      # 2) 再删缓存(不是更新)
读策略缓存优先,未命中回填
写策略写库 + 删缓存
TTL兜底过期,防止脏数据长期存在
为什么删缓存而不是更新缓存:并发写时「先写库A后写库B」与缓存的更新顺序可能交错,删除让下次读自然加载最新值。

易错点

  • 写时「先删缓存再写库」:并发读会在删后写库前把旧值回填
  • 回填不设 TTL:一旦删缓存步骤失败,脏数据永久驻留

数据来源与参考

  • Redis 官方文档: 缓存模式
  • 缓存一致性实践(Cache Aside)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌