• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    redis缓存穿透解决方法

    缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓存不是说随随便便加入项目就可以了。将缓存整合到项目中,这才是第一步。而缓存带来的穿透问题,进而导致的雪蹦问题都是我们迫切需要解决的问题。本篇文章将我平时项目中的解决方案分享给大家,以供参考。

    一、缓存穿透的原理

    缓存的正常使用如图:

    如图所示,缓存的使用流程:

    1、先从缓存中取数据,如果能取到,则直接返回数据给用户。这样不用访问数据库,减轻数据库的压力。

    2、如果缓存中没有数据,就会访问数据库。

    这里面就会存在一个BUG,如图:

    如图,缓存就像是数据库的一道防火墙,将请求比较频繁的数据放到缓存中,从而减轻数据库的压力。 但是如果有人恶意攻击,那就很轻松的穿透你的缓存,将所有的压力都给数据库。比如上图,你缓存的key都是正整数,但是我偏偏使用负数作为key访问你的缓存,这样就会导致穿透缓存,将压力直接给数据库。

    二、导致缓存穿透的原因

    缓存穿透的问题,肯定是再大并发情况下。依此为前提,我们分析缓存穿透的原因如下:

    1、恶意攻击,猜测你的key命名方式,然后估计使用一个你缓存中不会有的key进行访问。

    2、第一次数据访问,这时缓存中还没有数据,则并发场景下,所有的请求都会压到数据库。

    3、数据库的数据也是空,这样即使访问了数据库,也是获取不到数据,那么缓存中肯定也没有对应的数据。这样也会导致穿透。

    三、解决缓存穿透

    缓存穿透在于一步步规避穿透的原因,如图:

    如上图所示,解决的步骤如下:

    1、再web服务器启动时,提前将有可能被频繁并发访问的数据写入缓存。—这样就规避大量的请求在第3步出现排队阻塞。

    2、规范key的命名,并且统一缓存查询和写入的入口。这样,在入口处,对key的规范进行检测。–这样保存恶意的key被拦截。

    3、Synchronized双重检测机制,这时我们就需要使用同步(Synchronized)机制,在同步代码块前查询一下缓存是否存在对应的key,然后同步代码块里面再次查询缓存里是否有要查询的key。 这样“双重检测”的目的,还是避免并发场景下导致的没有意义的数据库的访问(也是一种严格避免穿透的方案)。

    这一步会导致排队,但是第一步中我们说过,为了避免大量的排队,可以提前将可以预知的大量请求提前写入缓存。

    4、不管数据库中是否有数据,都在缓存中保存对应的key,值为空就行。–这样是为了避免数据库中没有这个数据,导致的平凡穿透缓存对数据库进行访问。

    5、第4步中的空值如果太多,也会导致内存耗尽。导致不必要的内存消耗。这样就要定期的清理空值的key。避免内存被恶意占满。导致正常的功能不能缓存数据。

    您可能感兴趣的文章:
    • SpringBoot2整合Redis缓存三步骤代码详解
    • mybatis plus使用redis作为二级缓存的方法
    • window手动操作清理redis缓存的技巧总结
    • 提高redis缓存命中率的方法
    • 如何在 Java 中实现一个 redis 缓存服务
    • 浅谈Spring Boot中Redis缓存还能这么用
    • 在Java中使用redisTemplate操作缓存的方法示例
    • spring boot+spring cache实现两级缓存(redis+caffeine)
    • Redis缓存穿透出现原因及解决方案
    上一篇:提高redis缓存命中率的方法
    下一篇:redis实现分布式的方法总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    redis缓存穿透解决方法 redis,缓存,穿透,解决,方法,