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

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

缓存穿透

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

缓存雪崩

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

缓存击穿

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

总结

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

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

共同进步,学习分享

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

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

相关文章

在笔者近 3 年的 Java 一线开发经历中,尤其是一些移动端、用...
这一篇文章拖了有点久,虽然在项目中使用分布式锁的频率比较...
本文梳理总结了一些 Java 互联网项目中常见的 Redis 缓存应用...
书接上回,消息通知系统(notification-system)作为一个独立...
Redis 是目前互联网后端的热门中间件之一,在许多方面都有深...
在Java Spring 项目中,数据与远程数据库的频繁交互对服务器...