博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌
Java知识图谱点击链接:体系化学习Java(Java面试专题)
💕💕 感兴趣的同学可以收藏关注下 ,不然下次找不到哟💕💕
写在前面
大厂面试必问缓存,缓存必问 Redis,而 Redis 的面试必会问到 “穿击, 穿透, 雪崩, 污染”
1、【缓存击穿】
1.1、什么是缓存击穿
缓存击穿是指在使用缓存系统时,由于某个热点数据过期或不存在,导致大量请求直接访问数据库或其他存储系统,从而造成系统性能下降甚至崩溃的情况。
1.2、场景的场景
常见的缓存击穿场景如下:
热点数据失效:当一个热点数据在缓存中过期或被删除时,如果此时有大量请求同时访问该数据,缓存无法命中,导致请求直接落到数据库上,引发数据库压力过大。
不存在的数据请求:当请求一个不存在的数据时,缓存无法命中,请求直接落到数据库上,导致数据库无谓的查询操作。
1.3、如何解决
缓存击穿可以通过以下方式进行缓解:
设置热点数据的永不过期策略:对于一些热点数据,可以将其设置为永不过期,避免过期导致的缓存击穿。
加锁机制:当热点数据过期时,可以使用加锁机制,只允许一个请求访问数据库,其他请求等待结果,避免大量请求同时访问数据库。
异步加载数据:当热点数据过期时,可以使用异步加载的方式,先返回旧数据,然后异步加载新数据并更新缓存,避免请求直接落到数据库上。
前置缓存:在缓存层之前增加一层前置缓存,用于拦截请求并返回默认值,避免请求直接落到数据库上。
2、【缓存穿透】
2.1、什么是缓存穿透
缓存穿透是指在使用缓存系统时,恶意的请求或者非法的查询导致缓存和数据库都无法命中,从而导致大量请求直接访问数据库,造成系统性能下降甚至崩溃的情况。
2.2、常见的场景
缓存穿透的场景如下:
查询不存在的数据:当恶意请求或者非法查询请求一个不存在的数据时,缓存无法命中,请求直接落到数据库上,导致数据库无谓的查询操作。
大量请求同时查询不存在的数据:当有大量请求同时查询不存在的数据时,缓存无法命中,请求直接落到数据库上,引发数据库压力过大。
2.3、如何解决
缓存穿透可以通过以下方式进行缓解:
布隆过滤器(Bloom Filter):使用布隆过滤器判断请求的数据是否存在于缓存或者数据库中,如果不存在则可以直接拦截请求,避免无谓的查询操作。
缓存空对象(Cache Null Object):将不存在的数据也存储在缓存中,设置一个较短的过期时间,避免大量请求同时查询不存在的数据。
接口鉴权和参数校验:对请求进行鉴权和参数校验,过滤掉非法的请求,避免恶意请求对系统造成影响。
通过以上措施,可以有效缓解缓存穿透问题,提高系统的性能和稳定性。3、什么是 【缓存雪崩】
3.1、什么是缓存雪崩
缓存雪崩是指在使用缓存系统时,缓存中大量的数据同时失效或者缓存系统不可用,导致大量的请求直接访问数据库,造成数据库压力过大,甚至导致数据库崩溃的情况。
3.2、常见的场景
缓存雪崩的场景如下:
缓存数据同时失效:当缓存中的大量数据在同一时间段内失效,导致请求无法命中缓存,直接落到数据库上。
缓存系统不可用:当缓存系统发生故障或者由于其他原因不可用,请求无法命中缓存,直接落到数据库上。
3.3、如何解决
缓存雪崩可以通过以下方式进行缓解:
设置合理的缓存过期时间:将缓存的过期时间设置为不同的随机值,避免大量数据在同一时间失效。
分布式锁:在缓存失效时,通过分布式锁来控制只有一个请求去更新缓存,其他请求等待缓存更新完成后再获取数据。
缓存预热:在系统低峰期,提前主动加载缓存数据,避免在高峰期大量请求直接访问数据库。
多级缓存:使用多级缓存架构,将热点数据缓存在多级缓存中,减少单一缓存失效的影响范围。
通过以上措施,可以有效缓解缓存雪崩问题,提高系统的稳定性和性能。
4、什么是 【缓存污染】
4.1、什么是缓存污染
缓存污染是指在使用缓存系统时,缓存中存储了错误或无效的数据,导致系统返回不正确的结果或产生异常行为的情况。
4.2、常见的场景
缓存污染的场景如下:
缓存键冲突:当不同的数据使用相同的缓存键进行缓存时,会导致数据被覆盖或混淆,从而返回错误的结果。
缓存穿透:当请求的数据在缓存中不存在,而且也不存在于数据库中时,会导致频繁的数据库查询,增加数据库负载。
缓存击穿:当某个热点数据失效或被删除时,大量的请求同时访问该数据,导致请求直接落到数据库上,增加数据库负载。
4.3、如何解决
缓存污染可以通过以下方式进行缓解:
使用唯一的缓存键:确保不同的数据使用不同的缓存键进行缓存,避免数据混淆或覆盖。
设置合理的缓存过期时间:根据业务需求设置缓存的过期时间,避免数据过期后仍然被使用。
缓存穿透处理:对于不存在于缓存和数据库中的请求,可以使用布隆过滤器等技术进行过滤,避免频繁的数据库查询。
热点数据保护:对于热点数据,可以使用锁机制或者分布式缓存来保护,避免缓存击穿的问题。
通过以上措施,可以有效缓解缓存污染问题,提高系统的稳定性和性能。
💕💕 本文由激流原创,原创不易,感谢支持
💕💕喜欢的话记得点赞收藏啊