广告
返回顶部
首页 > 资讯 > 数据库 >redis缓存穿透解决方法
  • 539
分享到

redis缓存穿透解决方法

2024-04-02 19:04:59 539人浏览 独家记忆
摘要

缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓存不是说随随便便加入项目就可以了。将缓存整合到项目中,这才是第一步。而缓存带来的穿透问题,进而导致的雪蹦问题都是我

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

一、缓存穿透的原理

缓存的正常使用如图:

redis缓存穿透解决方法

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

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

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

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

redis缓存穿透解决方法

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

二、导致缓存穿透的原因

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

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

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

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

三、解决缓存穿透

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

redis缓存穿透解决方法

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

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

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

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

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

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

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

您可能感兴趣的文档:

--结束END--

本文标题: redis缓存穿透解决方法

本文链接: https://www.lsjlt.com/news/51421.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis缓存穿透解决方法
    缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓存不是说随随便便加入项目就可以了。将缓存整合到项目中,这才是第一步。而缓存带来的穿透问题,进而导致的雪蹦问题都是我...
    99+
    2022-10-18
  • redis缓存穿透的解决方法
    这篇文章主要介绍redis缓存穿透的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓...
    99+
    2022-10-18
  • redis缓存雪崩和缓存穿透的解决方法
    redis缓存雪崩和缓存穿透的怎么解决?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。缓存穿透缓存穿透是指查询一个一定不存在的数据。由于缓存不命...
    99+
    2022-10-18
  • Redis缓存击穿,雪崩,穿透解决方案
    缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,...
    99+
    2014-09-27
    Redis缓存击穿,雪崩,穿透解决方案
  • Redis缓存击穿、缓存穿透、缓存雪崩如何解决
    本篇内容介绍了“Redis缓存击穿、缓存穿透、缓存雪崩如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis缓存使用场景Redis...
    99+
    2023-07-05
  • Redis中缓存穿透/击穿/雪崩问题和解决方法
    目录缓存问题1. 缓存穿透---查不到解决方案2. 缓存击穿---量太大,缓存过期解决方案3. 缓存雪崩解决方案缓存问题 1. 缓存穿透---查不到 缓存穿透是指用户想查询一个数据,...
    99+
    2022-11-12
  • Redis中三大缓存现象缓存击穿、缓存穿透、缓存雪崩的解决方法
    这篇文章主要介绍“Redis中三大缓存现象缓存击穿、缓存穿透、缓存雪崩的解决方法”,在日常操作中,相信很多人在Redis中三大缓存现象缓存击穿、缓存穿透、缓存雪崩的解决方法问题上存在疑惑,小编查阅了各式资料...
    99+
    2022-10-18
  • redis中缓存穿透击穿雪崩如何解决
    这篇文章将为大家详细讲解有关redis中缓存穿透击穿雪崩如何解决,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。二:缓...
    99+
    2023-06-15
  • Redis缓存穿透、缓存击穿、缓存雪崩
    使用redis作为缓存时,存在一些应用问题,包括缓存穿透、缓存击穿、缓存雪崩。 Redis缓存穿透、缓存击穿缓存雪崩 redis常被用于作为后台数据库的缓存,缓存一些热点访问数据,根据局部性原...
    99+
    2014-07-07
    Redis缓存穿透 缓存击穿 缓存雪崩
  • 如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题
    这篇文章主要介绍了如何解决redis缓存穿透、缓存击穿、缓存雪崩的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。缓存穿透:key中对应的...
    99+
    2022-10-18
  • 详解Java redis中缓存穿透 缓存击穿 雪崩三种现象以及解决方法
    目录前言一、缓存穿透二、缓存击穿三、雪崩现象总结前言 本文主要阐述redis中的三种现象 1.缓存穿透 2.缓存击穿 3.雪崩现象 本文主要说明本人对三种情况的理解,如果需要知道re...
    99+
    2022-11-13
  • 解决redis缓存击穿的方法
    这篇文章主要介绍了解决redis缓存击穿的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。分布式缓存是网站服务端经常用到的一种技术,在读多写少...
    99+
    2022-10-18
  • redis如何解决缓存雪崩和穿透
    本篇内容介绍了“redis如何解决缓存雪崩和穿透”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • 缓存穿透,缓存击穿,缓存雪崩解决方案分析
    阅读本文大概需要 3.7 分钟。一、前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。二、缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则...
    99+
    2023-06-05
  • 详解Redis缓存穿透/击穿/雪崩原理及其解决方案
    目录1. 简介2. 缓存穿透2.1描述2.2 解决方案3. 缓存击穿3.1 描述3.2 解决方案4. 缓存雪崩4.1 描述4.1 解决方案5. 布隆过滤器5.1 描述5.2 数据结构...
    99+
    2022-11-12
  • redis的缓存雪崩、缓存穿透和缓存击穿
       缓存雪崩: 比如给缓存中的key设置了统一的过期时间,而在过期时间点,有大量的请求进来,这个时候redis中没有用户请求的资源,所以所有的请求会全部拥到数据库,如果数据库有报警监测的话,可能会报一下警,然后数据库就挂掉了。如果这时候把...
    99+
    2017-11-21
    redis的缓存雪崩 缓存穿透和缓存击穿
  • 如何解决Redis缓存穿透和缓存雪崩问题
    这篇文章主要为大家展示了“如何解决Redis缓存穿透和缓存雪崩问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Redis缓存穿透和缓存雪崩问题”这篇文...
    99+
    2022-10-19
  • 详解缓存穿透击穿雪崩解决方案
    目录一:前言二:缓存穿透三:解决方案四:缓存雪崩五:解决方案六:缓存击穿七:解决方案1、使用互斥锁(mutexkey)2、"提前"使用互斥锁(mutexkey)3、"永远不过期"4、...
    99+
    2022-11-12
  • 怎么解决Redis缓存雪崩、击穿与穿透问题
    这篇文章主要讲解了“怎么解决Redis缓存雪崩、击穿与穿透问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决Redis缓存雪崩、击穿与穿透问题”吧!...
    99+
    2022-11-30
    redis
  • 利用Redis实现分布式缓存穿透解决方案
    利用Redis实现分布式缓存穿透解决方案随着互联网业务的不断发展,数据访问量也在不断增加,为了提高系统的性能和用户体验,缓存技术逐渐成为了必不可少的一部分,其中Redis作为一种高效、可扩展的缓存中间件方案,备受开发者的青睐。在使用Redi...
    99+
    2023-11-07
    redis 分布式缓存 缓存穿透
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作