【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写
【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写
文章目录
- 【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写
- 一、缓存雪崩
- 二、缓存穿透
- 三、缓存击穿
- 四、Redis 的内存过期策略
- 五、并发读写和双写
一、缓存雪崩
缓存雪崩指的是在同一时刻 Redis 中大量的键值对都到了设置的失效时间,并且同时有大量的请求涌入,这个时候由于 Redis 中没有相应的键值对来完成这些请求,这些请求就会发给数据库,而数据库无法抗住这么大量的请求就直接崩溃了,即使重新启动数据库,还是会有大量新的请求,导致数据库又再次崩溃
如何处理?
- 批量向 Redis 存储据的时候,给每个键值对的失效时间都加一个随机值
- 为热点数据设置永不过期
二、缓存穿透
缓存穿透指的是同一时刻有大量的请求查询缓存和数据库中都没有的数据,比如 id 值为 -1 的数据。这种大量的请求会绕过数据库,直接请求数据库,由于数据库也没有这些数据,也就无法写入缓存,这样就会造成数据库压力过大,甚至崩溃
如何处理?
- 增加请求参数校验
- 如果缓存和数据库都没有这个键,可以暂时将值设置为 null
- 限制单个 IP 每秒的最大访问次数
- 使用布隆过滤器,可以高效地判断出数据库中是否有这个数据
布隆过滤器的原理
布隆过滤器实际上就是一个二进制数组,通过多个哈希函数计算数据库中数据的哈希值,并映射到数组中,也就是把对应索引位的 0 改为 1,表示数据存在。比如数据库中有 “hello” 这个数据,我们计算出它的哈希值映射为 3、5、7,那么查询的时候,必须 3、5、7 这三个索引对应的值都是 1 才能证明这个数据存在
多个哈希函数是为了防止哈希冲突
三、缓存击穿
缓存击穿指的是某一个键扛着大量的请求,在这个键失效的瞬间,大量的请求击穿缓存直接查询数据库,造成数据库压力过大,严重时会导致数据库崩溃
如何处理?
- 设置热点数据永不过期
- 设置互斥锁,缓存失效时,查询数据库并重新存入缓存,期间利用互斥锁阻塞后续的大量请求
四、Redis 的内存过期策略
- 定期删除,每隔一段时间抽取部分设置了过期时间的键检查是否过期
- 惰性删除,当查询到键的时候才检查是否过期,过期了则不返回
- 当内存不足时,使用最近最少使用算法淘汰键
五、并发读写和双写
如何处理并发读写带来的顺序不一致问题?
某个时刻,多个系统实例都去操作同一个键,比如下单、支付、减库存。这种情况可以基于 Zookeeper 实现分布式锁,每个系统实例都通过 Zookeeper 获取分布式锁,确保同一时间,只能有一个系统实例在操作同一个键,并且 Zookeeper 也可以确保各系统实例获取锁的顺序
如何处理缓存与数据库的双写问题?
- 读的时候,先读缓存,缓存没有再读数据库,并把数据放入缓存中,然后返回响应
- 更新的时候,先更新数据库,再删除缓存
【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写相关推荐
- redis缓存雪崩、穿透、击穿概念、布隆过滤器小结及解决办法
判存业务 redis缓存雪崩.穿透.击穿概念及解决办法 什么是 概念: 1.缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意 ...
- 小白也能看懂的缓存雪崩、穿透、击穿
作为后端开发,我想缓存是大家再熟悉不过的东西了. 我会介绍出现缓存雪崩.穿透和击穿的业务背景.解决方案和对业务可靠性处理.事先说明,最佳解决方案一定需要结合实际业务调整,不同业务的处理不完全相同 其实 ...
- 【Redis】快速掌握:缓存雪崩、穿透、击穿、预热
目录 前言 一.缓存 1.1.程序中缓存是什么样的? 1.2.缓存的优点 1.3.缓存的分类 二.缓存特性 2.1.缓存雪崩 2.1.1.雪崩问题 2.1.2.如何解决缓存雪崩问题 2.2.缓存穿透 ...
- Redis缓存雪崩、穿透、击穿,布隆过滤器,分布式锁详解
缓存雪崩 在某一个时间存在大量的缓存key失效 解决办法 1.有效期一直---->给每一个数据加上水机有效期 2.redis挂掉了----->使用redis集群,分摊key的存储 引出re ...
- 轻松易懂的缓存雪崩、穿透、击穿以及解决方案
缓存雪崩 先来看下雪崩的过程 所谓缓存雪崩,指的是缓存数据同一时间大量失效,所有的请求全打到数据库,导致数据库在巨大压力下挂掉. 比如在双十一的时候,用户都会打开淘宝买东西,有的人是真的有需要买的,有 ...
- Redis缓存的雪崩、穿透、击穿
前言: 使用缓存的主要目的是为了提高系统的响应速度.减轻数据库的压力.那么一个正常的缓存流程是怎样的呢,看下如下步骤: 1.用户发起查询请求 2.请求来到redis缓存,在缓存中查询到了数据,将缓存中 ...
- 什么是缓存穿透和缓存雪崩?【缓存问题】【刘新宇】
缓存问题 1 缓存穿透 缓存只是为了缓解数据库压力而添加的一层保护层,当从缓存中查询不到我们需要的数据就要去数据库中查询了.如果被黑客利用,频繁去访问缓存中没有的数据,那么缓存就失去了存在的意义,瞬间 ...
- 面试精讲之面试考点及大厂真题 - 分布式专栏 10 Redis雪崩,穿透,击穿三连问
10 Redis雪崩,穿透,击穿三连问 能够生存下来的物种,并不是那些最强壮的,也不是那些最聪明的,而是那些对变化作出快速反应的. --达尔文 引言 关于Redis雪崩,穿透,击穿的问题,第一次接触名 ...
- redis雪崩、穿透、击穿
文章目录 前言 缓存雪崩 缓存穿透 缓存击穿 传送门 前言 redis服务雪崩.穿透.击穿 缓存雪崩 缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部进入数据库,过量请求拖垮数据库,使整个服务崩溃 ...
最新文章
- svn版本控制git(github)
- Distimo发布新SDK 帮助开发者跟踪应用下载转换率
- Zabbix 2.2(一):Web监控的监控项
- 广东网络借贷中介整改验收,留给平台的时间只有8天!
- 面试中有哪些经典的数据库问题?
- 为什么待办事项清单不管用
- Oracle 数据定义
- sparkstreaming监听hdfs目录如何终止_HDFS—HA高可用详解
- VB.NET 使用DirectSound9 (3) StreamAudio
- mvc设计模式_MVC设计模式
- FindWindowEx的应用
- mysql客户端navicat连接数据库
- 常见路径规划算法介绍
- Rhino(犀牛)的视口
- Ubuntu出现System policy prevents modification of network settings for all users该怎么解决
- html转换txt文本格式方法,hthtml转txtml转换txt文本格式方法
- 【我的新学期】学习季
- 【VUE】学习记录一
- 2021年洛阳高中高考成绩查询,权威数据!2019年洛阳高考一本上线率、清北人数公布!还有一批学校被......
- 【DSY】Migration 题解
热门文章
- 将文件或视频隐藏在图片里
- 华为大数据战略_任正非:华为应抓住“大数据”机遇 抢占战略制高点
- java字符串拼接_字符串拼接,什么时候会走StringBuilder?
- elasticsearch 报表统计_螺丝ERP销售管理系统,螺丝企业专业管理统计
- 微软服务器系统桌面无图标,开机桌面没有图标的几种解决方法
- SQLSERVER查询存储过程内容
- nginx 配置后网站图片加载出来一半或者不出来
- CSS3常用选择器(三)
- ScrollView嵌套StackView提示需要宽度和高度限制
- maven配置篇之pom.xml