【大厂面试必问】Redis 击穿, 穿透, 雪崩, 污染

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【大厂面试必问】Redis 击穿, 穿透, 雪崩, 污染

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌

Java知识图谱点击链接:体系化学习Java(Java面试专题)

💕💕 感兴趣的同学可以收藏关注下不然下次找不到哟💕💕

1688468549787.jpg

写在前面

大厂面试必问缓存,缓存必问 Redis,而 Redis 的面试必会问到 “穿击, 穿透, 雪崩, 污染”

1、【缓存击穿】

1.1、什么是缓存击穿

缓存击穿是指在使用缓存系统时,由于某个热点数据过期或不存在,导致大量请求直接访问数据库或其他存储系统,从而造成系统性能下降甚至崩溃的情况。

1.2、场景的场景

常见的缓存击穿场景如下:

  1. 热点数据失效:当一个热点数据在缓存中过期或被删除时,如果此时有大量请求同时访问该数据,缓存无法命中,导致请求直接落到数据库上,引发数据库压力过大。

  2. 不存在的数据请求:当请求一个不存在的数据时,缓存无法命中,请求直接落到数据库上,导致数据库无谓的查询操作。

1.3、如何解决

缓存击穿可以通过以下方式进行缓解:

  1. 设置热点数据的永不过期策略:对于一些热点数据,可以将其设置为永不过期,避免过期导致的缓存击穿。

  2. 加锁机制:当热点数据过期时,可以使用加锁机制,只允许一个请求访问数据库,其他请求等待结果,避免大量请求同时访问数据库。

  3. 异步加载数据:当热点数据过期时,可以使用异步加载的方式,先返回旧数据,然后异步加载新数据并更新缓存,避免请求直接落到数据库上。

  4. 前置缓存:在缓存层之前增加一层前置缓存,用于拦截请求并返回默认值,避免请求直接落到数据库上。

    2、【缓存穿透】

    2.1、什么是缓存穿透

    缓存穿透是指在使用缓存系统时,恶意的请求或者非法的查询导致缓存和数据库都无法命中,从而导致大量请求直接访问数据库,造成系统性能下降甚至崩溃的情况。

    2.2、常见的场景

    缓存穿透的场景如下:

  5. 查询不存在的数据:当恶意请求或者非法查询请求一个不存在的数据时,缓存无法命中,请求直接落到数据库上,导致数据库无谓的查询操作。

  6. 大量请求同时查询不存在的数据:当有大量请求同时查询不存在的数据时,缓存无法命中,请求直接落到数据库上,引发数据库压力过大。

    2.3、如何解决

缓存穿透可以通过以下方式进行缓解:

  1. 布隆过滤器(Bloom Filter):使用布隆过滤器判断请求的数据是否存在于缓存或者数据库中,如果不存在则可以直接拦截请求,避免无谓的查询操作。

  2. 缓存空对象(Cache Null Object):将不存在的数据也存储在缓存中,设置一个较短的过期时间,避免大量请求同时查询不存在的数据。

  3. 接口鉴权和参数校验:对请求进行鉴权和参数校验,过滤掉非法的请求,避免恶意请求对系统造成影响。
    通过以上措施,可以有效缓解缓存穿透问题,提高系统的性能和稳定性。

    3、什么是 【缓存雪崩】

    3.1、什么是缓存雪崩

    缓存雪崩是指在使用缓存系统时,缓存中大量的数据同时失效或者缓存系统不可用,导致大量的请求直接访问数据库,造成数据库压力过大,甚至导致数据库崩溃的情况。

    3.2、常见的场景

缓存雪崩的场景如下:

  1. 缓存数据同时失效:当缓存中的大量数据在同一时间段内失效,导致请求无法命中缓存,直接落到数据库上。

  2. 缓存系统不可用:当缓存系统发生故障或者由于其他原因不可用,请求无法命中缓存,直接落到数据库上。

    3.3、如何解决

    缓存雪崩可以通过以下方式进行缓解:

  3. 设置合理的缓存过期时间:将缓存的过期时间设置为不同的随机值,避免大量数据在同一时间失效。

  4. 分布式锁:在缓存失效时,通过分布式锁来控制只有一个请求去更新缓存,其他请求等待缓存更新完成后再获取数据。

  5. 缓存预热:在系统低峰期,提前主动加载缓存数据,避免在高峰期大量请求直接访问数据库。

  6. 多级缓存:使用多级缓存架构,将热点数据缓存在多级缓存中,减少单一缓存失效的影响范围。

通过以上措施,可以有效缓解缓存雪崩问题,提高系统的稳定性和性能。

4、什么是 【缓存污染】

4.1、什么是缓存污染

缓存污染是指在使用缓存系统时,缓存中存储了错误或无效的数据,导致系统返回不正确的结果或产生异常行为的情况。

4.2、常见的场景

缓存污染的场景如下:

  1. 缓存键冲突:当不同的数据使用相同的缓存键进行缓存时,会导致数据被覆盖或混淆,从而返回错误的结果。

  2. 缓存穿透:当请求的数据在缓存中不存在,而且也不存在于数据库中时,会导致频繁的数据库查询,增加数据库负载。

  3. 缓存击穿:当某个热点数据失效或被删除时,大量的请求同时访问该数据,导致请求直接落到数据库上,增加数据库负载。

    4.3、如何解决

    缓存污染可以通过以下方式进行缓解:

  4. 使用唯一的缓存键:确保不同的数据使用不同的缓存键进行缓存,避免数据混淆或覆盖。

  5. 设置合理的缓存过期时间:根据业务需求设置缓存的过期时间,避免数据过期后仍然被使用。

  6. 缓存穿透处理:对于不存在于缓存和数据库中的请求,可以使用布隆过滤器等技术进行过滤,避免频繁的数据库查询。

  7. 热点数据保护:对于热点数据,可以使用锁机制或者分布式缓存来保护,避免缓存击穿的问题。

通过以上措施,可以有效缓解缓存污染问题,提高系统的稳定性和性能。

1686494501743.jpg

💕💕 本文由激流原创,原创不易,感谢支持
💕💕喜欢的话记得点赞收藏啊

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
25天前
|
存储 缓存 NoSQL
Redis 面试题
Redis 基础面试题
|
2月前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
3月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
3月前
|
存储 NoSQL 算法
阿里面试:亿级 redis 排行榜,如何设计?
本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
|
3月前
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
6月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
3月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
3月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
3月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
92 4
|
4月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
140 2