redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决,redis缓存穿透解决方法

redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决,redis缓存穿透解决方法

在这篇文章中,边肖和大家分享了redis缓存穿透的解决方案和相关实例,所以有需要的朋友可以借鉴一下。

缓存技术可以用来减轻数据库的压力,提高访问效率。目前,缓存在企业项目中越来越受到重视。但是缓存并不意味着只是随便加入项目。这是将缓存集成到项目中的第一步。但是缓存导致的穿透问题,然后是雪跳问题,都是我们迫切需要解决的问题。本文将我平时项目的解决方案分享给大家,供大家参考。

一、缓存穿透的原理

高速缓存的正常使用如图所示:

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

1.先从缓存中获取数据,如果可以获取,直接将数据返回给用户。这样就不需要访问数据库,从而减轻了数据库的压力。

2.如果缓存中没有数据,将访问数据库。

里面会有一个BUG,如图:

如图所示,缓存就像是数据库的防火墙,将频繁请求的数据放入缓存,从而减轻数据库的压力。但是如果有人恶意攻击,就会很容易穿透你的缓存,把所有的压力都给数据库。比如上图中,你缓存中的键都是正整数,而我只是用负数作为键来访问你的缓存,这样会导致缓存的穿透,直接给数据库造成压力。

二、导致缓存穿透的原因

缓存穿透的问题肯定是在大并发的情况下。基于这一前提,我们对缓存渗透的原因分析如下:

1.恶意攻击,猜测你的密钥是如何命名的,然后估计使用一个不会在你缓存中的密钥进行访问。

2.对于第一次数据访问,当缓存中没有数据时,在并发场景中,所有请求都将被压入数据库。

3.数据库中的数据也是空的,所以即使访问数据库也无法获取数据,所以缓存中肯定没有对应的数据。这也会导致渗透。

三、解决缓存穿透

缓存穿透是逐步避免穿透的原因,如图:

如上图所示,求解步骤如下:

1.web服务器启动时,提前将可能频繁并发访问的数据写入缓存。—这避免了大量请求在步骤3中排队。

2.规范key的命名,统一缓存查询和写入的条目。这样,在入口处,钥匙的规格就得到检验。以这种方式保存的恶意密钥被拦截。

3.同步双检测机制。这时候我们就需要在同步代码块之前使用Synchronized机制查询缓存中是否有对应的键,然后在同步代码块时再查询缓存中是否有要查询的键。这种“双重检测”的目的是为了避免并发场景导致的无意义的数据库访问(也是一种严格避免渗透的方案)。

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

4.不管数据库中有没有数据,都在缓存中保存对应的键,只要值为空。这是为了避免由于数据库中缺少这些数据而通过缓存访问数据库。

5.如果第四步的空值太多,也会导致内存耗尽。导致不必要的内存消耗。这样,定期清理空钥匙就很有必要了。避免恶意的内存填充。因此,普通函数无法缓存数据。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • redis队列操作命令,redis 循环队列
  • redis队列操作命令,redis 循环队列,redis实现简单队列
  • redis部署应用服务器上,redis如何启动服务器
  • redis部署应用服务器上,redis如何启动服务器,搭建Redis服务器步骤详细介绍
  • redis缓存穿透和击穿解决方案,redis缓存穿透,缓存雪崩解决
  • Redis缓存,redis和缓存
  • Redis缓存,redis和缓存,Redis缓存详解
  • redis的配置,启动,操作和关闭方法有哪些,关闭redis的命令,Redis的配置、启动、操作和关闭方法
  • redis的主从配置方法详解图,Redis主从配置
  • redis的主从配置方法详解图,Redis主从配置,redis的主从配置方法详解
  • redis界面工具,mac安装redis可视化工具
  • redis界面工具,mac安装redis可视化工具,推荐几款 Redis 可视化工具(太厉害了)
  • redis正确使用的十个技巧是什么,redis正确使用的十个技巧有哪些
  • redis正确使用的十个技巧是什么,redis正确使用的十个技巧有哪些,Redis正确使用的十个技巧
  • 留言与评论(共有 条评论)
       
    验证码: