微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大厂门槛之缓存穿透、缓存雪崩和缓存击穿

如今redis被广泛的运用于各互联网公司中,无论是大厂还是普通的小公司均可看到其身影,对于后端程序员来说并不陌生。在面试中也是也是属于高频问题,其中缓存穿透、缓存雪崩和缓存击穿更是常见,今天小杨就和大家一起来认识认识其真面目。

缓存穿透

  1. 设置校验规则,对于一些不符合规则的key可以在查询之前直接处理掉。或者是利用布隆过滤器(BloomFilter)先过滤
  2. 利用互斥锁。缓存失效或者查询不到的时候,先去获得锁,得到锁了,再去请求数据库。避免大量请求同时落到数据库
  3. 无论数据库是否查询得到,都将值写到redis缓存中,后面的查询就直接落到redis
  4. 可以对短时间内大量相同的请求的ip做限制访问

缓存雪崩

  • 理解雪崩:
    是指大量的相同时间的缓存在同一时间内过期或者是redis无法提供服务,此时,大量的用户请求落到数据库中进行查询,造成服务器压力过大
  • 如何解决
  1. 建立高效,可用的redis架构,可以使用 主从+哨兵,保证reids稳定提供服务
  2. 避免缓存的过期时间大量相同,如可用给过期的时间加上随机数,分散失效。如果是热点数据可用设置不过期

缓存击穿

  1. 为缓存设置互斥锁,当第一个请求得到锁后就将该查询到的数据缓存起来,后面的请求就可以到redis中进行查询
  2. 如果是可预见的热点数据,可以直接设置不过期。

总结

面对上面三种情况,使用redis,我们可以事先搭建好稳定,可用的架构服务,如主从+哨兵。在使用的过程中,对请求进行过滤(如布隆过滤器或者是自定义的规则),避免过多无效的请求。做好限流、降级容灾,避免到数据库进行查询,导致数据库无法正常工作。

欢迎下方交流讨论。如果本篇博客有任何错误,请批评指教,不胜感激 !

共同进步,学习分享

欢迎大家关注我的公众号【写代码的小杨】,相关文章、学习资料都会在里面更新,整理的资料也会放在里面。

觉得写的还不错的就点个赞,加个关注呗!持续更新 !!! 点关注,不迷路,小杨带你上高速

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐