首先要理解这3个问题的概念,比较容易记混的是穿透和击穿,个人认为这是个名字而已,更重要的是概念。当然分享一下个人记忆的一个小技巧:透,透明,表示本来就没有的东西,所以缓存穿透指数据库本来就没有这些key,但是又有大量请求打来导致直接访问到数据库上了。
缓存穿透:本来就没有的key
因为数据库中本来就没有这些key,但又有大量的这些key请求访问过来,导致穿过了redis打到数据库上了
解决:布隆过滤器(过滤器还有其他几种,之间的差异可以自行了解)
缓存击穿:少量key被大量请求
某些key过期或者被清除掉后,针对这些key的大量请求打来过来,直接穿透了redis到数据库上了
解决:第一次访问后发现没有缓存,就访问数据库并设置缓存,这样下一次访问的时候就能访问缓存了
缓存雪崩:大量key被大量请求
大量的key同时过期或被清理,间接造成大量的访问到达数据库
解决:key设置过期时间随机,尽量错开过期时间
如果某些业务要求0点清除:
1、 可以设置延迟随机时间执行;
2、 缓存击穿方案做备案;
【后续补充这些方案的具体实现,包括布隆过滤器的部署使用】