SystemDesign | 缓存

  • 缓存穿透: 布隆过滤器, 写null数据,
  • 缓存雪崩: 加随机过期时间
  • 缓存击穿: 某条缓存失效的时候, 正好有大量并发读这个key, 访问量都落在了数据库// 解决: 准备load db时, 先 Setnx k,

@ref redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案 - 知乎

➤ 缓存的一致性问题, 指的是Cache/DB出现不一致数据,其根本原因是 “读写Cache” 和”读写DB”不是原子的.

➤ 解决缓存一致性方案:

  • 方案1:
    • 读: 先读cache, 读不到则查db, 然后把db查询结果写入cache;
    • 更新: 更新db, 删除cache;
    • 可能存在的问题: 两个读线程, A读到了V1数据然后休眠, 这时候B线程修改了数据, 版本为V2, 线程A醒来, 把先前读到的V1写入Cache
  • 方案2: 方式1的更新操作改为延迟双删: updateDB, delCache, sleep(1s), delCache
  • 方案3: cache订阅DB的binlog

@ref redis 双写一致性 看一篇成高手系列1_数据库_hjm4702192的专栏-CSDN博客