Redis 之 缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透

这篇具有很好参考价值的文章主要介绍了Redis 之 缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、缓存预热

1.1 缓存预热是什么?

1.2 解决方案:

二、缓存雪崩

2.1 缓存雪崩是什么?怎么发生的?

2.2 怎么解决

三、缓存穿透

3.1 是什么?怎么产生的呢?

3.2 解决方案

 3.2.1、采用回写增强,

 3.2.2、加上一个布隆过滤器,

四、缓存击穿

4.1 是什么?

4.2 怎么解决

五、总结


一、缓存预热

1.1 缓存预热是什么?

缓存预热是指在系统启动或者高峰期之前,提前将数据加载到缓存中,避免在用户请求的时候,先查询数据库(这样第一个查询的人就会比较慢),再把查询结果回写到redis当中去。

1.2 解决方案:

为了防止用户访问的时候Redis中没有数据,所以提前将热点数据保存到Redis里面(通过LRU数据删除策略,可以得到高频数据队列),通过脚本的方式将热点数据提前加入。

二、缓存雪崩

2.1 缓存雪崩是什么?怎么发生的?

缓存雪崩是指在缓存系统中,大量缓存数据同时失效或过期,导致请求直接打到数据库或后端服务,从而引起数据库压力过大或服务崩溃的现象。

  • redis 主机挂了, Redis全盘崩溃,偏硬件运维
  • redis 中有大量key 同时过期大面积失效,偏软件开发

2.2 怎么解决

1、针对于redis服务器问题,可以采用redis的高并发策略:使用主从复制 + 哨兵 ,或者直接使用redis集群模式,并且这时候需要开启redis的持久化机制,方便从机上位的时候能够快速恢复之前的数据。

2、多缓存预防雪崩:不仅仅只用redis这么一个缓存,也可以在本地加上一个ehcache缓存,把哪些高频信息给存储进来,这样就不需要所有的数据都需要去redis上面去找了。

3、服务降级: 直接就不让用户前来访问容易出现问题的信息了,直接提示当前访问人数过多,请稍后再试。

Redis 之 缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透,Redis,缓存,redis,数据库

 4、人民币玩家:直接使用阿里云的云数据库redis版

三、缓存穿透

3.1 是什么?怎么产生的呢?

缓存穿透 就是请求去查询一条数据,先查redis,redis里面没有,再查mysql,mysql里面无,都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增

缓存穿透可能是由于恶意攻击缓存设置不当或者数据更新频繁等原因引起的。

缓存穿透最怕的情况就是黑客恶意攻击,比如他现在知道了你key的格式:abc xxx,正好这个数据你的redis没有,MySQL当中也没有,那么他就会一直查这个,导致你的redisMySQL接受一次次的暴击。怎么解决这个问题呢?

3.2 解决方案

 3.2.1、采用回写增强,

既然都是黑客了,逃过布隆过滤器还不是简简单单?

如果发生了缓存穿透,我们可以针对要查询的数据,在Redis里存一个和业务部门商量后确定的缺省值(比如,零、负数、defaultNull等)。

比如,键uid:abcdxxx,值defaultNull作为案例的key和value

先去redis查键uid:abcdxxx没有,再去mysql查没有获得 ,这就发生了一次穿透现象。

but,可以增强回写机制

mysql也查不到的话也让redis存入刚刚查不到的key并保护mysql。这样等下次再来查这个值的时候,就不会发生缓存穿透了。

但是,此方法架不住黑客的恶意攻击,有缺陷......,只能解决key相同的情况,假如黑客可以找到不同的key,总不能每个key都回写到redis里吧?这时候我们就需要新的解决方法了。

 3.2.2、加上一个布隆过滤器,

布隆过滤器可以过滤掉大部分不存在的情况(当然也有一定的漏判率)。我们在数据访问redis之前可以先让他去通过一下布隆过滤器,如果布隆中没有,那么就是肯定没有,直接返回就行了。

Redis 之 缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透,Redis,缓存,redis,数据库

四、缓存击穿

4.1 是什么?

缓存击穿就是大量请求同时查询一个key(或一批)时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去,也就是热点key突然都失效了,MySQL承受高并发量

简单说就是:热点key突然失效,导致MySQL被暴打

4.2 怎么解决

  1. 设置热点数据的永不过期策略:对于一些非常热门的数据,可以将其缓存时间设置为永不过期,这样可以避免缓存失效导致的击穿问题。但需要注意,这种方式可能会导致缓存数据不及时更新的问题。

  2. 互斥更新,采用双检加锁机制

    多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它

    其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。

五、总结

Redis 之 缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透,Redis,缓存,redis,数据库文章来源地址https://www.toymoban.com/news/detail-646409.html

到了这里,关于Redis 之 缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十八章_Redis缓存预热+缓存雪崩+缓存击穿+缓存穿透

    缓存预热 缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据。 可以通过@PostConstruct初始化白名单数据 缓存雪崩 发生  redis主机挂了,Redis 全盘崩溃

    2024年02月07日
    浏览(47)
  • Redis7之缓存预热 + 缓存雪崩 + 缓存击穿 + 缓存穿透(八)

    缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据! 使用 @PostConstruct 初始化白名单数据 缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造

    2023年04月08日
    浏览(46)
  • 探讨Redis缓存问题及解决方案:缓存穿透、缓存击穿、缓存雪崩与缓存预热(如何解决Redis缓存中的常见问题并提高应用性能)

    Redis是一种非常流行的开源缓存系统,用于缓存数据以提高应用程序性能。但是,如果我们不注意一些缓存问题,Redis也可能会导致一些性能问题。在本文中,我们将探讨Redis中的一些常见缓存问题,并提供解决方案。 缓存穿透指的是当一个请求尝试访问一个不存在于缓存中的

    2024年02月03日
    浏览(93)
  • Redis - 做缓存时高并发问题:缓存穿透、击穿、雪崩,数据库缓存双写不一致

    当用户访问的数据既不在缓存也不在数据库中时,就会导致每个用户查询都会“穿透” 缓存“直抵”数据库。这种情况就称为缓存穿透。当高度发的访问请求到达时,缓存穿透不 仅增加了响应时间,而且还会引发对 DBMS 的高并发查询,这种高并发查询很可能会导致 DBMS 的崩

    2024年02月04日
    浏览(48)
  • Redis_缓存3_缓存异常(数据不一致、雪崩、击穿、穿透)

    四个方面 缓存中数据和数据库不一致 缓存雪崩 缓存击穿 缓存穿透 14.6.1数据不一致: 一致性包括两种情况 缓存中有数据,需要和数据库值相同 缓存中没有数据,数据库中的数据是最新值 如果不符合以上两种情况,则出现数据不一致的问题。 读写缓存 同步直写 异步写回

    2024年02月13日
    浏览(42)
  • Redis 缓存穿透、缓存雪崩、缓存击穿

    缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 常见的解决方案有两种:         缓存空对象                  优点:实现简单,维护方便                 缺点: 额外的内存消耗 可能造

    2024年02月02日
    浏览(46)
  • redis 缓存雪崩 && 缓存击穿 && 缓存穿透

    什么是缓存雪崩 当我们提到缓存系统中的问题,缓存雪崩是一个经常被讨论的话题。缓存雪崩是指在某一时刻发生大量的缓存失效,导致瞬间大量的请求直接打到了数据库,可能会导致数据库瞬间压力过大甚至宕机。尤其在高并发的系统中,这种情况会导致连锁反应,整个系

    2024年02月07日
    浏览(49)
  • REDIS缓存穿透 击穿 雪崩

    一、前言   在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来

    2024年02月09日
    浏览(42)
  • Redis缓存击穿、雪崩、穿透

    我们通过对数据库的数据进行查询后在redis中缓存,但是在高并发环境下,某个保存的key值在失效的瞬间被大量并发请求访问,这些持续的大并发量就会穿破缓存,直接请求数据库,会对数据库造成巨大压力,这些请求还会使数据多次写入缓存,多了许多不必要的操作。    

    2024年02月08日
    浏览(45)
  • Redis缓存穿透,雪崩,击穿

    1、定义 缓存 就是数据交换的 缓冲区 ,缓存就是 缓冲区内的数据 ,一般从数据库中获取,存储于本地代码。 由于其被 Static 修饰,所以随着类的加载而被加载到 内存之中 ,作为本地缓存,由于其又被 final 修饰,所以其引用和对象之间的关系是固定的,不能改变,因此不用担心赋值(=

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包