百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

阿里面试官:Redis雪崩、雪崩、穿透、击穿是什么意思?

mhr18 2024-11-03 13:44 23 浏览 0 评论


问题

Redis 雪崩、穿透、击穿是什么意思?有什么办法解决?

分析

这道题想考察候选人是否熟悉redis,以及redis真实场景使用所会踩到的坑。

Redis 作为我们常用的一款缓存工具,常用方式:请求先请求到Redis,

Redis数据不存在(失效),请求就会查询DB(cache miss),然后写回Redis。

cache hit 场景不会请求DB

cache miss 场景会请求DB

Redis 雪崩

雪崩场景可以分为两种

  1. 大量数据同时失效
  2. Redis 故障宕机

大量数据同时失效

大量数据的失效,会导致请求全部打到DB上,从而可能将DB给打挂了。

解决方案

  1. 将set key的时候过期时间上加一个随机数,让缓存的过期时间

打散,不要集中在某个点。

  1. 使用singlefilght,单机上并发请求同一个key,该 key 失效的话,

只会有一个请求去获取db数据。

Redis故障宕机

Redis宕机导致请求全部打到DB上,把DB给打挂了。

解决方案

  1. 服务加入熔断机制&限流机制,Redis挂了之后,大量请求请求

到Redis都失败了,此时会熔断阀门会打开,就不会请求redis了,

另外在请求db上加入限流机制,防止把DB打挂了。

  1. 使用Redis集群模式,Redis主节点挂了,从节点会切换成

主节点保证Redis服务可用率。

Redis 穿透

某个数据在DB不存在,但是一直有大量请求过来,每一次cache都不会命中,

全部请求都打到DB上,比较容易把DB打挂。一般都是恶意攻击,黑产请求之类的。

解决方案

  1. 缓存空值在Redis上,这样请求不会打到DB上。

缺点:如果缺省的数据量集很大,Redis内存可能会被不存在的数据耗光。

  1. 使用布隆过滤器快速判断数据是否存在,查询数据的时候,

如果数据存在则存储到布隆过滤器上,每次请求过来先过一遍布隆过滤器,

查询布隆过滤器说数据存在,并不一定证明数据库中存在这个数据,

但是查询到数据不存在,数据库中一定就不存在这个数据。

缺点:布隆过滤器存储在机器内存上,可能会导致机器内存很大。

Redis 击穿

频繁访问的热点数据失效了,导致大量请求到DB,

一般在秒杀/大促场景下。

解决方案

  1. 热点数据提前监测,提前设置较常的过期时间避免失效。

(后台异步监测,异步刷新缓存)

  1. singleflight,一台机器上大量请求过来,缓存失效,

只会有一个去请求DB,避免了大量请求到DB

相关推荐

Java面试题及答案总结(2025版)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Redis、Linux、SpringBoot、Spring、MySQ...

Java面试题及答案最全总结(2025春招版)

大家好,我是Java面试分享最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Spring...

Java面试题及答案最全总结(2025版持续更新)

大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...

蚂蚁金服面试题(附答案)建议收藏:经典面试题解析

前言最近编程讨论群有位小伙伴去蚂蚁金服面试了,以下是面试的真题,跟大家一起来讨论怎么回答。点击上方“捡田螺的小男孩”,选择“设为星标”,干货不断满满1.用到分布式事务嘛?为什么用这种方案,有其他方案...

测试工程师面试必问的十道题目!全答上来的直接免试

最近参加运维工程师岗位的面试,笔者把自己遇到的和网友分享的一些常见的面试问答收集整理出来了,希望能对自己和对正在准备面试的同学提供一些参考。一、Mongodb熟悉吗,一般部署几台?部署过,没有深入研究...

10次面试9次被刷?吃透这500道大厂Java高频面试题后,怒斩offer

很多Java工程师的技术不错,但是一面试就头疼,10次面试9次都是被刷,过的那次还是去了家不知名的小公司。问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。应届生:你该如何准备简历,面试项目和...

java高频面试题整理

【高频常见问题】1、事务的特性原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态隔离性:在事务正确提交之前,不允许把该...

2025 年最全 Java 面试题,京东后端面试面经合集,答案整理

最近京东搞了个TGT计划,针对顶尖青年技术天才,直接宣布不设薪资上限。TGT计划面向范围包括2023年10月1日到2026年9月30日毕业的海内外本硕博毕业生。时间范围还...

idGenerator测评

工作中遇到需要生成随机数的需求,看了一个个人开发的基于雪花算法的工具,今天进行了一下测评(测试)。idGenerator项目地址见:https://github.com/yitter/IdGenera...

2024年开发者必备:MacBook Pro M1 Max深度体验与高效工作流

工作机器我使用的是一台16英寸的MacBookProM1Max。这台电脑的表现堪称惊人!它是我用过的最好的MacBook,短期内我不打算更换它。性能依然出色,即使在执行任务时也几乎听不到风扇的...

StackOverflow 2022 年度调查报告

一个月前,StackOverflow开启了2022年度开发者调查,历时一个半月,在6月22日,StackOverflow正式发布了2022年度开发者调查报告。本次报告StackO...

这可能是最全面的SpringDataMongoDB开发笔记

MongoDB数据库,在最近使用越来越广泛,在这里和Java的开发者一起分享一下在Java中使用Mongodb的相关笔记。希望大家喜欢。关于MongoDB查询指令,请看我的上一篇文章。SpringD...

Mac M2 本地部署ragflow

修改配置文件Dockerfile文件ARGNEED_MIRROR=1//开启国内镜像代理docker/.envREDIS_PORT=6380//本地redis端口冲突RAGFLOW_IMA...

别再傻傻分不清!localhost、127.0.0.1、本机IP,原来大有讲究!

调试接口死活连不上?部署服务队友访问不了?八成是localhost、127.0.0.1、本机IP用混了!这三个看似都指向“自己”的东西,差之毫厘谬以千里。搞不清它们,轻则调试抓狂,重则服务裸奔。loc...

我把 Mac mini 托管到机房了:一套打败云服务器的终极方案

我把我积灰的Macmini托管到机房了,有图有真相。没想到吧?一台在家吃灰的苹果电脑,帮我省了大钱!对,就是控制了自己的服务器,省了租用云服务器的钱,重要数据还全捏在自己手里,这感觉真爽。你可...

取消回复欢迎 发表评论: