一、缓存穿透

1、redis缓存穿透概念

用户查询某一个数据,但该数据不存在于redis内存数据库中(缓存没有命中),这时候就会向持久层数据库查询,但持久层数据库也没有该数据,于是本次查询失败,若用户很多时,他们查询的数据不存在于redis内存数据库中(缓存没有命中),于是都去请求了持久层数据库,这样就会给持久层数据库带来很大的压力,这种大量不走redis内存数据库的现象就叫缓存穿透。

2、解决方案

(1)布隆过滤器

在控制层对请求先进行校验,不符合条件的请求则被丢弃,从而避免对持久层数据库造成的查询压力。

(2)缓存空对象

当查询的数据不存在于redis中时,请求到了持久层数据库中去查询数据,但查询不出数据,这时会返回空对象,同时把该空对象缓存到redis里,然后设置一个过期时间,往后只要再次请求查询该条数据,该条数据都会从redis中获取(获取redis返回的空对象),从而保护了后端的数据源。

缺点:

【1】因为空对象能被缓存起来,而有些请求有可能查询不出数据,所以过程中可能产生大量的返回空对象然后被redis缓存的现象,而这意味着redis需要更多的空间来存储更多的键。

【2】即使对空对象设置了过期时间,但如果在redis的空对象在未过时的情况下,持久层数据库已经有了对应的数据,而redis对应的键的值仍是空对象,这时请求查询出的仍是空对象,而不是持久层里已经有的数据,而这种情况对于需要保持数据一致性的业务会造成影响。

二、缓存击穿

1、redis缓存击穿概念

redis里的一个key非常热点,导致大并发集中对这个key不断的进行访问,当在这个key过期的瞬间,持续的大并发就会跳过缓存,直接作用在持久层数据库上,请求在访问持久层数据库查询数据的同时,持久层数据库也需要回写缓存,这时候就会导致持久层数据库瞬间压力过大导致服务器宕机,这种现象就叫做缓存击穿。

2、解决方案

(1)设置热点key永不过期。

(2)加互斥锁:使用分布式锁在redis和持久层数据库之间加锁,让每次查询都能保证只有一个线程进去,其他线程等待,这样做就能保证对于每一个key同时只能有一个线程去查询后端持久层数据库,而其他线程没有分布式锁的权限,所以只能等待,这种解决方案把高并发的压力转移到了分布式锁身上,但同时也加大了对分布式锁的考验。

三、缓存雪崩

1、redis缓存雪崩概念

在某一时间段,一批key集中过期失效或者redis宕机,导致大量的请求作用在持久层数据库上,导致持久层数据库挂掉。

2、解决方案

(1)redis高可用

详情的redis集群搭建可参考我的另一篇文章:https://blog.csdn.net/m0_64284147/article/details/125753898

(2)限流降级:通过加锁或队列来控制读取持久层数据库的线程数量,例如通过对某个key加锁来保证只有一个线程对该key进行读和写,其他线程则需要等待。

(3)数据预热:在正式部署前把可能被大量访问的数据先访问一遍,这些被访问的数据就会被加载到缓存中,在正式的大量访问到来之后减轻持久层数据库的压力;在发生大并发访问前手动触发加载缓存所需要的key,并给这些key设置不同的过期时间,让key失效的时间点尽量均匀开来,避免缓存雪崩。

其他:

注意三者的区别,缓存渗透是个别key没有被命中,导致请求作用在持久层数据库上,这时影响较小(为方便记忆,可以根据词义进行助记,渗透一词的意味较广泛、分散、轻缓,可记成缓存渗透就是请求穿透redis发生得不集中,较广泛分散,穿透的请求在全部请求里就像分散的一个个的点);缓存渗透是大量的请求作用在同一个key上,在key过期的瞬间作用在持久层服务器上,导致服务器宕机,这时影响较大(为方便记忆,可以根据词义进行助记,穿透一词的意味范围集中,不分散,可记成缓存击穿就是请求作用集中在一点上,穿透redis直接作用在持久层数据库上,请求就像一条穿透redis和持久层数据库的线);缓存雪崩是一批key集中过期或redis宕机,导致持久层数据库挂掉,影响很大(为方便记忆,可以根据词义进行助记,雪崩一词的意味作用很广泛、范围很大,可记成缓存雪崩就是请求大量、大片的穿透redis作用在持久层数据库上,这种情况形象点的词来形容就是面)

Redis缓存穿透和缓存击穿相关推荐

  1. Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?

    欢迎关注方志朋的博客,回复"666"获面试宝典 原始数据存储在 DB 中(如 MySQL.Hbase 等),但 DB 的读写性能低.延迟高. 比如 MySQL 在 4 核 8G 上 ...

  2. Redis专题-缓存穿透、缓存雪崩、缓存击穿

    一.缓存穿透 缓存穿透概念 缓存穿透是指查询一个一定不存在的数据,在数据库没有,自然在缓存中也不会有.导致用户查询的时候,在缓存中找不到对应key的value,每次都要去数据库再查询一遍,如果从存储层 ...

  3. Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

    一.缓存雪崩: 1.什么是缓存雪崩: 如果缓在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机.这时候如果 ...

  4. Redis缓存穿透、缓存击穿和缓存雪崩

    目录 一.缓存穿透 概念 解决方案 布隆过滤器 缓存空对象 二.缓存击穿 概念 解决方案 使用互斥锁(mutex key) 设置热点数据永不过期 三.缓存雪崩 概念 解决方案 redis高可用 限流降 ...

  5. redis缓存穿透、缓存雪崩、缓存击穿、并发竞争

    关注微信公众号"虾米聊吧",每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流. 缓存穿透.缓存雪崩.缓存击穿.并发竞争是缓存最常见的几个问题,接 ...

  6. Redis学习之缓存穿透、缓存击穿和缓存雪崩详解

    目录 缓存穿透 解决方案 缓存空对象 布隆过滤器 缓存击穿 解决方案 对访问数据库的操作加锁 提前缓存热点数据,设置热点数据永不过期 缓存雪崩 解决方案 Redis高可用 限流降级 数据预热 设置合理 ...

  7. redis专题:redis缓存穿透、缓存击穿、缓存雪崩等问题如何解决?

    文章目录 1. 缓存穿透 1.1 缓存空对象 1.2 布隆过滤器 2. 缓存击穿(失效) 3. 缓存雪崩 在高并发项目中,redis作为热门中间件,在为项目带来便利性的同时,也存在一些隐患,比如缓存穿 ...

  8. redis缓存穿透,缓存击穿与缓存雪崩详解

    前言 在web应用开发中,redis越来越多的应用于各种需要缓存的场景中,比较经典的使用场景就是,使用redis配合mysql做二级缓存,以应对在流量高峰的时候,减少高并发请求对数据库的压力 但是在这 ...

  9. 【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写

    [重难点][Redis 03]缓存雪崩.缓存穿透.缓存击穿.Redis 的内存过期策略.并发读写和双写 文章目录 [重难点][Redis 03]缓存雪崩.缓存穿透.缓存击穿.Redis 的内存过期策略 ...

  10. 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿

    from:https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc Redis缓存的使用,极大的提升 ...

最新文章

  1. from . import _arpack ImportError: DLL load failed
  2. css之px自动转rem—sublime 插件CSSREM
  3. [Poi2011]Tree Rotations线段树合并
  4. 观看实验中微型计算机虚拟拆装演示,虚拟仿真实验 北斗一号微机原理虚拟仿真实验系统64位 v3.0...
  5. PyTorch 1.0 中文文档正式接受校对 | ApacheCN
  6. 现成的CA证书签发工具
  7. AcWing 4242. 货币兑换(SPFA or Bellman 判正权环)
  8. 版本更新带来的缓存问题_【第1563期】缓存最佳实践 amp; maxage的陷阱
  9. XCode6自定义pch文件
  10. windows强制删除文件或者程序
  11. 华为云数据容灾服务,如何守护企业数据安全
  12. import * as用法
  13. 公众号网页授权php,微信公众号里的PHP网站进行网页授权
  14. tomcat访问localhost:8080不能显示tom猫页面的问题
  15. 2021.07.28
  16. 5V开关电路应用设计
  17. 计算机主流处理器介绍,现在电脑主流配置有哪些 2017主流电脑配置清单一览表...
  18. 《那些年啊,那些事——一个程序员的奋斗史》——36
  19. R语言List列表和向量Vector互相转化源码和思路
  20. 工作态度-《精要主义》书中的精髓:我们如何践行精要主义,摆脱拥挤不堪的生活?

热门文章

  1. 测试用例的特性以及编写测试用例的方法
  2. STM32高级定时器TIM1TIM8中断设置提醒
  3. java util logger slf4j_Java日志工具之SLF4J
  4. 工具性思维,甚至是大脑的核武器
  5. Vue.js--表单绑定数据、修饰符详解
  6. 深入理解ReLU、Leaky ReLU、 PReLU、ELU、Softplus
  7. 谈谈对中文乱码,编码的理解 java python
  8. 剑三千岛湖服务器是不是维护了,剑网3千岛湖倭寇泡澡怎么完成_剑网3千岛湖倭寇泡澡任务流程_牛游戏网...
  9. 学计算机买宏基好吗,宏基的笔记本怎么样?好不好?
  10. Redis缓存和MySQL数据一致性