一、缓存穿透

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. 面试热点|理解TCP/IP传输层拥塞控制算法
  2. 光电编码器的原理及应用场合_光电传感器原理及应用
  3. Visual Studio Code的一个插件,让图标以Material的设计风格呈现
  4. 软件测试python基础_软件测试学习教程——python基础
  5. codeforces E. Game with String 概率
  6. java sha1加密ascii码_如何使用加密芯片完成SHA1摘要运算
  7. 复练-软考网规-两地三中心
  8. 关于垃圾回收,我来解释下为什么LocalConnection可以实现垃圾回收
  9. Go 源码学习之--net/http
  10. 敏捷开发与测试(面试话题之一)
  11. 微信小程序上传图片,视频及预览
  12. everything开启服务器功能
  13. 现在唯一可以得到卡巴斯基激活码的地方
  14. 什么时候做牙齿矫正好呢?
  15. Javascript高级程序设计——9.正则表达式(1)
  16. FORECAST函数预算产品的使用寿命测试值
  17. ubuntu下破解rar文件的密码
  18. 【硬件工程师炼成之路】器件篇 铝电解电容 电感 磁珠
  19. photoshop 2021 for mac安装教程,亲测可用!!!
  20. 精通手游运维的架构体系

热门文章

  1. 查看数据库占用磁盘空间的方法
  2. Pytorch的scatter函数详解
  3. Photoshop 2023 Beta 24.6_爱国版_安装教程,内置AI绘画_创意填充Generative Fill功能及常见问题
  4. 【vxe-table】和【el-table】调整列(单元格)背景色,指定列背景色设置,两层或多层表头也适用
  5. android 字母索引三方,Android ListView字母索引(仿微信通讯录列表)
  6. tp5 File文件写入(生成静态文件)
  7. 基于Zemax的干涉仪仿真——Fizeau球面干涉仪
  8. 诗经 - 小雅 - 彤弓
  9. html时间选择器时分秒,原生js日历日期控件带时分秒日期选择器
  10. 量化必读:Tick数据到底是什么为么难找到可靠交易数据?