跟着“乐哉”学习redis系列教程-缓存雪崩、缓存穿透、缓存击穿

十四、缓存雪崩、缓存穿透、缓存击穿

缓存穿透

用户请求的key再数据库中并不存在,是一个违法的key,导致每次都从数据库中查找,从而可能压垮数据库。如果黑客利用大量的违法key进行请求,将会导致数据库瞬间崩塌

解决方案

可以使用redis的布隆过滤器,将所有可能的key存放到bitmap中,一个一定不存在的key将会被布隆过滤器拦截掉,从而截断对数据库的访问,如果key没有被布隆过滤器拦截下来,查询库中,没有返回结果,我们可以将一个空值存放到缓存中,缓存时间不宜过长。

缓存击穿

某个被高频访问的key在某一时间点过期,这时出现大量对这个key的访问,这时候缓存中又没有数据,导致同时去库中查询数据,造成数据库压力瞬间增大。

解决方案

  • 设置互斥锁
  • 设置key永不过期(不推荐)

缓存雪崩

指大批量的key在同一时刻过期,导致数据库查询压力瞬间增大,与缓存击穿不同的是,缓存雪崩是大批量的key同时过期。

解决方案

  • 缓存key的过期时间设置为随机
  • 设置数据用不过期

总结

花了三周的时间将《Redis深度历险》研读完,又花了一周的时间,将自己的笔记和理解整理成了这篇博文,通过这一个月的学习与总结,让自己对redis有了一个更深层次的理解,并把自己的总结的知识分享给有需要的人,文中如果讲叙有不对的地方,希望在评论区留言,感谢,下一阶段将会拆分解读《高性能mysql》这一红宝书,这个应该会需要更长的时间,如果想要提前学习的话,可以关注我的公众号,回复“高性能mysql“领取电子版书籍。



跟着“乐哉”学习redis系列教程-缓存雪崩、缓存穿透、缓存击穿