跟着“乐哉”学习redis系列教程-缓存雪崩、缓存穿透、缓存击穿
十四、缓存雪崩、缓存穿透、缓存击穿
缓存穿透
用户请求的key再数据库中并不存在,是一个违法的key,导致每次都从数据库中查找,从而可能压垮数据库。如果黑客利用大量的违法key进行请求,将会导致数据库瞬间崩塌
解决方案
可以使用redis的布隆过滤器,将所有可能的key存放到bitmap中,一个一定不存在的key将会被布隆过滤器拦截掉,从而截断对数据库的访问,如果key没有被布隆过滤器拦截下来,查询库中,没有返回结果,我们可以将一个空值存放到缓存中,缓存时间不宜过长。
缓存击穿
某个被高频访问的key在某一时间点过期,这时出现大量对这个key的访问,这时候缓存中又没有数据,导致同时去库中查询数据,造成数据库压力瞬间增大。
解决方案
- 设置互斥锁
- 设置key永不过期(不推荐)
缓存雪崩
指大批量的key在同一时刻过期,导致数据库查询压力瞬间增大,与缓存击穿不同的是,缓存雪崩是大批量的key同时过期。
解决方案
- 缓存key的过期时间设置为随机
- 设置数据用不过期
总结
花了三周的时间将《Redis深度历险》研读完,又花了一周的时间,将自己的笔记和理解整理成了这篇博文,通过这一个月的学习与总结,让自己对redis有了一个更深层次的理解,并把自己的总结的知识分享给有需要的人,文中如果讲叙有不对的地方,希望在评论区留言,感谢,下一阶段将会拆分解读《高性能mysql》这一红宝书,这个应该会需要更长的时间,如果想要提前学习的话,可以关注我的公众号,回复“高性能mysql“领取电子版书籍。