缓存穿透、缓存击穿、缓存雪崩_缓存穿透和缓存击穿有什么区别

缓存穿透、缓存击穿、缓存雪崩_缓存穿透和缓存击穿有什么区别在我们的平常项目中多多少少会用到缓存,因为一些数据没必要每次查询都跑到数据库中查询。 1、缓存穿透 请求去查询一条不存在的数据,也就是缓存和数据库都查询不到这条数据,但每次请求都会打到数据库上去。 …

缓存穿透、缓存击穿、缓存雪崩、热点数据失效问题的解决方案

在我们的平常项目中多多少少会用到缓存,因为一些数据没必要每次查询都跑到数据库中查询。

缓存穿透、缓存击穿、缓存雪崩_缓存穿透和缓存击穿有什么区别

1、缓存穿透 

       请求去查询一条不存在的数据,也就是缓存和数据库都查询不到这条数据,但每次请求都会打到数据库上去。

        这种查询不存在数据的现象我们称为: 缓存穿透

缓存穿透带来的问题

       试想 黑客对你的系统进行攻击,每次都拿不存在的 ID 去查询数据,会产生大量的请求,会导致数据库由于压力过大而宕机。

缓存穿透解决方案

       1)缓存空值:把空数据的key对应的值设置为 null 丢到 缓存中去,这样再查询可以返回 null 值。

       2) BloomFilter类似于 hbase set 来判断某个元素(key)是否存在于某个集合中。 这种方案可以加在第一种方案中,在缓存之前在加一层 BloomFilter              在查询的时候先去 BloomFilter 去查询 key 是否存在,如果不存在就直接返回,存在再走查缓存 -> 查 DB。

2、缓存击穿

        在高并发的系统中,大量的请求同时查询一个 key 时,而这个 key 刚好 失效了,就会导致大量的请求打到 数据库中, 导致数据库压力倍增。

 缓存击穿带来的问题

         会造成某一时刻数据库请求量过大,压力剧增。

 缓存击穿如何解决

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

3、缓存雪崩

         缓存雪崩的情况是说,当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了,会有大量的请求进来直接打到DB上面。结果就是DB 撑不            住,挂掉了。

   解决办法  

          事前 ​​​​​​​:

               使用集群缓存,保证缓存服务的高可用 ​​​​​​​

          事中:

                ehcache本地缓存 + Hystrix限流&降级,避免MySQL被打死

          事后:

                开启Redis持久化机制,尽快恢复缓存集群

4、解决热点数据集中失效

        我们在设置缓存的时候,一般会给缓存设置一个失效时间,过了这个时间,缓存就失效了。 对于一些热点的数据来说,当缓存失效以后会存在大量的请            求过来,然后打到数据库去,从而可能导致数据库崩溃的情况。

   解决方案:

        1)、 设置不同的失效时间

       2)、   互斥锁

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6791.html

(0)
上一篇 2023-04-03
下一篇 2023-04-03

相关推荐

  • sql谓语_sql的功能

    sql谓语_sql的功能本文将会和大家一起学习 SQL 的搜索条件中不可或缺的工具——谓词(predicate)。SQL 谓词就是返回值为 TRUE、FALSE 或 UNKNOWN 的表达式。 谓词用于 WHERE 子句 和

    2023-05-22
    122
  • Python枚举详解

    Python枚举详解枚举是计算机程序设计中常用的一种数据类型,Python 3.4 引入了枚举类型,Python3. Enum 类提供了一个简单的方式来定义枚举类型,可以将枚举看作是一种标记,表示着有限个数的可能性。

    2024-07-24
    40
  • Python元组:简洁高效的数据结构

    Python元组:简洁高效的数据结构Python中元组是一种有序列表,与列表相似,不同的是元组中的元素不能修改,且使用圆括号()来创建。元组的优势在于其不可更改性,因此在创建只读的数据结构时非常有用。下面是创建元组的实例:

    2024-02-29
    94
  • Python log10 2:计算以10为底,2的对数

    Python log10 2:计算以10为底,2的对数log函数是数学中非常常见的一种函数,在实际的计算中也有着广泛的应用。基本上所有科学工程计算都要用到对数运算,比如测量声音和地震的强度等等。在自然语言处理领域中,log函数也常被用来计算概率。

    2023-12-28
    139
  • redis —— linux下源码安装[亲测有效]

    redis —— linux下源码安装[亲测有效]一、下载redis源码,此处以redis 5.0.7为例 wget http://download.redis.io/releases/redis-5.0.7.tar.gz 二、解压 tar -xf

    2023-03-06
    175
  • 提高螺纹连接强度——Python Helicoil Insert

    提高螺纹连接强度——Python Helicoil Insert在机械设计中,螺纹连接是常用的连接方式之一,但在实际应用中,常常出现螺纹损坏导致连接松动等问题。Helicoil Insert是一种有效的螺纹加固解决方案,它可以提高螺纹连接的强度和可靠性,避免因螺纹损坏而导致的松动问题。

    2024-04-03
    72
  • [TcaplusDB知识库]TcaplusDB的存储分配策略图解[亲测有效]

    [TcaplusDB知识库]TcaplusDB的存储分配策略图解[亲测有效]
    前言 保存数据的方法多种多样,最直接的方法是在内存中建一个数据结构,保存数据。比如用一个List,每当收到一条数据就向List中追加一条记录。 这个方案非常…

    2023-04-09
    157
  • mysql -h -u_MySQL date

    mysql -h -u_MySQL date在mysql中,hint指的是“查询优化提示”,会提示优化器按照一定的方式来生成执行计划进行优化,让用户的sql语句更具灵活性;Hint可基于表的连接顺序、方法、访问路径、并行度等规则对DML(数据操

    2023-06-16
    155

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注