欢迎光临散文网 会员登陆 & 注册

redis面试篇-01一文搞懂雪崩、穿透、击穿、预热

2023-06-08 22:08 作者:懒人Java屈原  | 我要投稿

你知道什么是缓存雪崩吗?你知道什么是缓存穿透吗?你知道redis的持久化机制是什么吗?redis作为缓存数据库在项目中大量使用,在面试时,被问到的几率也非常高频。今天,我就带大家从这几个问题出发,了解下redis。

1.什么是缓存雪崩?

日常开发中,为了节省内存空间,redis的key值会设置过期时间。一旦大量的redis缓存过期,所有的请求全部怼到数据库(mysql默认最大连接数,看版本),就会把数据库搞挂掉(如下图所示),这就是缓存雪崩。

怎么解决缓存雪崩呢?

1.设置热点数据永不过期

2.数据访问加互斥锁,每次只允许一个用户访问

3.缓存降级策略,比如:redis缓存失效,还有本地缓存,本地缓存之后才是mysql

4.缓存失效时间分散化,防止集中失效:

将缓存的key值先罗列到纸上,然后对key值时间进行规划,分散开来

将缓存的key值失效时间,加上一个随机数,进行分散。

2.什么是缓存穿透?

如果一个key值,它在redis与数据库都不存在时,如果一个黑客利用这个key值,进行高并发访问,就会搞垮数据库,称为缓存穿透。


1.当这个key值不存在时,先临时将null或者空字符写入到redis中,过期时间设置的短一些,几分钟以内。

2.将数据库所有的结果放到布隆过滤器里,布隆过滤器结果只存0与1,当0时,代表数据库没有数据。直接拒绝查询。

3.什么是缓存击穿?

当一个key值过期时,请求激增,大量的请求把数据库搞垮。
怎么解决缓存击穿?

1.热点数据设置永不过期

2.从数据库读取key值并更新到缓存使用排它锁,同一时间只允许一个线程操作。其他线程进入睡眠状态,被唤醒获取到锁后,先检测缓存是否有数据,有数据直接返回。

4.什么是缓存预热

就是系统上线后手动去加载数据到缓存中,避免等客户请求时,再去加载数据

解决办法:

1.写个缓存刷新页面,手工操作

2.定时任务去刷新缓存

3.数据量不大的情况可以在系统启动时,直接加载

5.缓存淘汰策略有哪些

redis缓存淘汰策略可以分为如下:

1.定时清理过期的缓存

2.用户请求过来时,判断缓存是否过期,过期就从源数据取数据并更新缓存


redis面试篇-01一文搞懂雪崩、穿透、击穿、预热的评论 (共 条)

分享到微博请遵守国家法律