Redis中的缓存穿透、缓存击穿、缓存雪崩(面试版)

缓存穿透

缓存穿透:查询一个不存在的数据,在mysql数据库中查询不到数据也不会写入缓存,导致每次请求都查询数据库,增加数据库负载。

解决办法:

1、**缓存空值:**将数据库中不存在的结果(例如空值)也缓存起来,并设置一个较短的过期时间,避免频繁查询数据库

2、**使用布隆过滤器:**使用布隆过滤器来快速判断一个请求的数据是否存在,如果布隆过滤器判断数据不存在,则直接返回,避免查询数据库。

  • 布隆过滤器原理:

3、防止非法请求:检查非法请求,封禁其IP以及账号

缓存击穿

缓存击穿: 给某一个key设置了过期时间,当key过期的时候,恰好对这个key有大量的请求过来,这些并发的请求可能会瞬间把DB压垮

解决办法:

1)加互斥锁:保证同一时间只有一个请求来构建缓存,跟缓存雪崩相同。

2)热点数据永不过期:不要给热点数据设置过期时间,在后台异步更新缓存

缓存雪崩

缓存雪崩是指在某个时间点,大量缓存同时失效或被清空,导致大量请求到达数据库或后端系统,造成系统负载激增,甚至引发系统崩溃,这通常是由于缓存中的大量数据在同一时间失效引起的。

解决办法:

1、**设置过期时间随机化:**设置缓存的过期时间,加上一个随机值,避免同一时间大量缓存失效。

2、**使用多级缓存:**引入多级缓存,如Guava或Caffeine作为一级缓存,redis作为二级缓存。

3、**构建集群:**构建多个 Redis 集群提高服务的可用性

相关推荐
吳所畏惧27 分钟前
Linux环境/麒麟V10SP3下离线安装Redis、修改默认密码并设置Redis开机自启动
linux·运维·服务器·redis·中间件·架构·ssh
困知勉行19853 小时前
springboot整合redis
java·spring boot·redis
飞鸟真人4 小时前
Redis面试常见问题详解
数据库·redis·面试
C雨后彩虹4 小时前
计算误码率
java·数据结构·算法·华为·面试
longson.5 小时前
怎样避免空间碎片而且高效的分配空间
嵌入式硬件·缓存
不染尘.5 小时前
进程切换和线程调度
linux·数据结构·windows·缓存
Sailing6 小时前
AI 流式对话该怎么做?SSE、fetch、axios 一次讲清楚
前端·javascript·面试
无限大67 小时前
为什么"缓存"能提高系统性能?——从 CPU 缓存到分布式缓存
后端·面试
xixixi777777 小时前
CDN(内容分发网络)——缓存和分发网站、应用程序、视频等内容,以提高用户访问速度和稳定性,减少网络延迟和拥塞,同时减轻源服务器的压力
网络·缓存·架构·系统架构·cdn·业务·内容分发网络
ANnianStriver7 小时前
redis安装包方式下载安装
数据库·redis·缓存