一、缓存穿透
1.1 描述
缓存穿透是指缓存和数据库中都没有数据,而用户不断发起请求则这些请求会穿过缓存直接访问数据库,如发起为id为“-1”的数据或id为特别大不存在的数据。假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。
1.2 解决方案
缓存空对象:当存储层不命中时,创建空对象并将其缓存起来,同时会设置一个过期时间(避免控制占用更多的存储空间),之后再访问这个数据将会从缓存中获取,保护了后端数据源;
二、缓存击穿
2.1 描述
缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对一个key不停进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。
2.2 解决方案
分布式锁:
-
设置热点数据永远不过期
-
加分布式锁
三、缓存雪崩
3.1 描述
缓存雪崩,是指在某一个时间段,缓存集中过期失效。
3.2 解决方案
缓存数据的过期时间设置随机或不同分类商品缓存不同周期或热门类目的商品缓存永不过期