当前位置: 首页 > news >正文

Redis面试题-缓存雪崩、缓存穿透、缓存击穿问题

1 穿透: 两边都不存在(皇帝的新装) (黑名单) (布隆过滤器)

2 穿:一个热点的key失效了,这时大量的并发请求直接到达数据库. (提前预热

3 雪崩:大量key同时失效 (避免大量的key同一时间失效,错峰

1. 缓存雪崩

问题描述: 缓存雪崩是指在某个时间段内,大量缓存集中过期失效,进而导致大量请求直接落到了数据库上,数据库瞬间压力剧增,可能导致数据库崩溃。比如,如果多个缓存数据设置了相同的过期时间,在过期那一刻,原本由缓存支撑的请求都转到了数据库,形成了流量“雪崩”。

解决办法

雪崩:错峰处理

将redis内的数据设置一个时间段内随机失效时间

  • 随机过期时间:为每个缓存项的过期时间增加一个随机范围,避免同一时刻大量缓存同时失效。
  • 分层缓存:采用二级缓存策略,一级缓存失效后,立即尝试从二级缓存获取,减轻数据库压力。
  • 设置热点数据永不过期或延长过期时间:对于访问非常频繁的热点数据,可以考虑设置永不过期或采取更长的有效期策略。
  • 后台异步刷新:在缓存即将过期前,后台异步更新缓存,而不是等到用户请求触发时再实时更新。
  • 限流、熔断、降级:在系统设计时加入限流措施,当请求过多时进行熔断或服务降级,减少对数据库的影响。
  • 集群化和数据分片:通过集群化部署,让缓存分散在多个节点上,减小单点失效的风险。

3. 缓存击穿

问题描述: 缓存击穿特指某个热点Key在缓存过期的瞬间,大量并发请求恰好同时到达,请求直通数据库,导致数据库瞬时压力激增。

解决办法

提前预热(调用)

解决办法:在大量访问请求前提前调用一次接口,刷新失效时间

  • 互斥锁(Mutex Lock):在缓存失效时,不是立即去数据库查询,而是先尝试获得锁,只有拿到锁的请求才能访问数据库,其他请求等待锁释放后再次尝试。
  • 延时双删策略:在缓存失效时,先删除缓存,然后异步去数据库查询最新数据,成功后再次放入缓存;并且设置一个短时间的延迟,在这个延迟期内如果有新的请求过来,还可以继续依赖已删除的缓存。
  • 热点数据永不过期:对于非常重要的热点数据,可以考虑将其设置为永不过期,然后通过后台定时任务或者其他机制定期更新缓存。

 

2. 缓存穿透

问题描述: 缓存穿透是指查询一个根本不存在的数据,缓存和数据库中都没有该数据,但客户端仍持续发起请求,导致每次请求都直接打到数据库上,无法利用缓存减轻数据库的压力,而且如果是恶意攻击,可能引发严重的性能问题。

解决办法

(黑名单) (布隆过滤器):将数据库中也没有的数据放入黑名单,查询时先去redis查询,然后查询redis黑名单,然后再去查询数据库。

  • 缓存空值:对于查询结果为null的数据,也在缓存中存储一份,设定较短的有效期。
  • 布隆过滤器:使用布隆过滤器提前拦截那些一定不存在的数据请求,避免请求到达数据库。
  • 前端校验:对于请求参数进行合法性和合理性校验,减少无效请求进入后端。

 

http://www.lryc.cn/news/327060.html

相关文章:

  • 【Node.js】npx
  • hive授予指定用户特定权限及beeline使用
  • Vmware虚拟机无法用root直连说明
  • Visio中存在问题的解决方法
  • taro之Swiper的使用
  • 正大国际:金融行业发展趋势
  • vue中实现超出一行 展开和收起的功能
  • 记录一次使用cert-manager-颁发CA证书
  • 生成式AI的风险与挑战
  • 让IIS支持.NET Web Api PUT和DELETE请求
  • 运维小技能:IP多号段配置、重置Mac电脑密码、修改系统级别的文件
  • Docker的Ubuntu上的安装教程及相关命令
  • 一些常见的nacos问题和答案
  • 华为OD机22道试题
  • 什么是Prompt Tuning?
  • 正则表达式篇
  • CAST(columnA AS VARCHAR(255)) AS fieldA报错的问题
  • github加速神器!解决github巨慢的问题,并且能够加速下载!另外推荐GitKraken -- 超好用的 Git 可视化工具
  • Stable Diffusion XL之使用Stable Diffusion XL训练自己的AI绘画模型
  • 软件杯 深度学习 机器视觉 人脸识别系统 - opencv python
  • IDEA | 资源文件中文乱码问题解决
  • Linux系统使用Docker部署Portainer结合内网穿透实现远程管理容器和镜像
  • 【Git篇】复习git
  • [LitCTF 2023]程序和人有一个能跑就行了
  • 如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问
  • perl:获取同花顺数据--业绩快报,业绩公告
  • FPGA选型
  • centos系统的root密码忘记或失效的解决办法(超详细)
  • 【Android 源码】Android源码下载指南
  • MySQL数据库高级语句