- 缓存穿透: 布隆过滤器, 写null数据,
- 缓存雪崩: 加随机过期时间
- 缓存击穿: 某条缓存失效的时候, 正好有大量并发读这个key, 访问量都落在了数据库// 解决: 准备load db时, 先 Setnx k,
➤ 缓存的一致性问题, 指的是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