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

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 【大厂面试必问】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
目录
相关文章
|
13天前
|
存储 缓存 NoSQL
Redis八股文(大厂面试真题)
Redis八股文(大厂面试真题)
54 1
Redis八股文(大厂面试真题)
|
9天前
|
存储 NoSQL Redis
《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化
《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化
|
11天前
|
存储 缓存 NoSQL
经验大分享:Redis简单总结及常见面试题
经验大分享:Redis简单总结及常见面试题
16 1
|
2天前
|
缓存 NoSQL Redis
Java面试之redis篇
Java面试之redis篇
8 0
|
9天前
|
缓存 NoSQL 数据库
分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
18 0
|
9天前
|
缓存 NoSQL Java
Redis系列学习文章分享---第四篇(Redis快速入门之Java客户端--商户查询缓存+更新+双写一致+穿透+雪崩+击穿+工具封装)
Redis系列学习文章分享---第四篇(Redis快速入门之Java客户端--商户查询缓存+更新+双写一致+穿透+雪崩+击穿+工具封装)
13 0
|
2天前
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
4天前
|
存储 消息中间件 缓存
apt安装Redis 7
【7月更文挑战第2天】
|
9天前
|
存储 NoSQL 关系型数据库
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
27 1
|
19天前
|
NoSQL Redis Windows
win10下Redis安装、启动教程
win10下Redis安装、启动教程
21 2