缓存穿透 击穿 雪崩
缓存穿透:不存在的数据请求打到数据库,返回时并不会存入缓存,对数据库造成压力
解决方案
-
缓存null值
优点:简单易实现
缺点:可能造成缓存和数据库数据不一致,消耗内存 -
布隆过滤器
优点:内存友好,缓存没有多余的key
缺点:实现复杂,容易误判
击穿:热点数据缓存过期,大量请求打到数据库
解决方案
-
逻辑过期:不设置过期时间,缓存时添加一个过期的字段,下次访问时如果过期则返回旧数据,然后重新查数据库
优点:性能比较好
缺点:数据不一致 -
互斥锁:先用setnx设置一个互斥锁,开启新线程查数据库重建缓存,操作成功后再返回数据。
优点:数据强一致
缺点:性能差
雪崩:大量缓存数据同时过期,大量请求打到数据库
解决方案
- 原有过期时间基础上增加一个随机过期时间