缓存穿透
介绍
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写,并且处于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
解决方案
- 通过布隆过滤器拦截。
- 对空结果进行缓存,但是过期时间很短,不超过5分钟。
缓存雪崩
介绍
缓存雪崩是指设置缓存采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬间压力过重雪崩。
解决方案
- 采用同步或者队列的方式保证缓存的单线程写,从而避免失效时大量的并发请求落到底层储存系统上。
- 在缓存的失效时间基础上增加一个随机值,比如1-5分钟。
缓存击穿
介绍
对于一些设置了过期时间的key,如果这些key可能在某些时间点被超高并发地访问,是一种非常“热点”的数据。
缓存在某个点过期的时候,恰好在这个时间点对这个key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端加载数据并回设到缓存,这个时候大并发的请求可能瞬间把后端DB压垮。
解决方案
通过分布式锁保证只有拿到锁,拿到锁的请求去load db,其他拿不到锁的请求重新get缓存数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。