【Redis从头学-15】三个通俗例子带你理解Redis缓存击穿、缓存穿透、缓存雪崩并从思路引导三者的解决方案

简介: 【Redis从头学-15】三个通俗例子带你理解Redis缓存击穿、缓存穿透、缓存雪崩并从思路引导三者的解决方案

🌟前言


对于Redis缓存击穿、缓存穿透、缓存雪崩在求职面试中是常问题目。但是看这个字面意思太难理解上述三种现象,而且特别容易混淆。本篇文章就引导思路来让大家彻底理解三种现象以及解决方案。


🌟通俗理解


大家可以这样理解:Key比作一个点。


缓存击穿可以联想到体育运动中的击剑,击中一次代表某个Key失效;(一个点)

缓存雪崩可以联想到雪山中的雪崩景象,一个雪球代表某个key,多个雪球滚落代表多个key失效;(多个点)

缓存穿透可以联想到王者荣耀中的护甲受到真实伤害,假设其中的护甲代表着由密集Key做成的,受到真实伤害代表着你这件护甲根本不存在。(密集点)


🌟缓存击穿


现象:某个热点Key缓存失效,已经过期。

思路引导:


  1. 设置热点Key永不过期:从缓存过期的角度出发,我们想到了一个解决方案那就是设置热点key用不过期。那如果每个热点key都设置时间用不过期,而redis又是基于内存存储缓存,那就会造成性能的下降;此外,如果后端更新这个热点key的数据,而用户在请求的时就会获取到旧的数据。虽然有其缺点,但是也有它的适用场景,那就是适合静态数据即不经常变动的数据。
  2. 定时任务更新缓存:针对第一种解决方案的缺点,我们可以在程序中设置一个定时任务,根据热点Key的访问规律来定期更新缓存数据。
  3. 互斥锁:通过只有一个线程获取到锁来解决缓存击穿。当一个请求从缓存中查找key时,如果获取到null,则会获取锁。获取成功后会从数据库查询数据,并写入缓存。


🌟缓存穿透


现象:热点数据在缓存中根本就不存在。

思路引导:

1.接口层增加数据合理性校验:比如接口地址中传入一个id为-1的商品ID,那肯定数据不存在的。所以从此出发,可以通过对接口参数值增加数据校验,防止别人恶意传参。

2. 设置NULL值:由于是缓存根本不存在,我们可以设置一个空值,来避免缓存穿透的发生。但是,空值太多往往会造成性能的下降。

3. 设置短点的过期时间:过期时间过短是不是会增大缓存击穿的风险呢。

4. 布隆过滤器:通过此过快速检查缓存中是否存在热点KEY。


🌟缓存雪崩


现象:多个热点KEY失效。

思路引导:


  1. 离散过期时间:多个热点key集体失效,可能是设置了相对集中或者相同过期时间的key,可以将过期时间设置的相对分散一些。
  2. 设置Key用不过期并定时任务更新缓存:设置Key永不过期并在程序中设置一个定时任务,根据热点Key的访问规律来定期更新缓存数据。


🌟总结


现象 缓存击穿 缓存穿透 缓存雪崩
描述 某个热点Key缓存失效,已经过期。 热点数据在缓存中根本就不存在。 多个热点KEY失效。
解决方案 1.设置热点Key永不过期;
2.定时任务更新缓存;
3.互斥锁。
1.接口层增加数据合理性校验;
2.设置NULL值;
3.设置短点的过期时间;
4.布隆过滤器。
1.离散过期时间;
2.设置Key用不过期并定时任务更新缓存。


🌟写在最后


有关于从思路上理解Redis缓存击穿、缓存穿透、缓存雪崩及解决方案到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


目录
相关文章
|
缓存 数据库连接 数据库
缓存三剑客(穿透、击穿、雪崩)
缓存穿透指查询数据库和缓存中都不存在的数据,导致请求直接冲击数据库。解决方案包括缓存空对象和布隆过滤器。缓存击穿是大量请求访问同一个失效的热点数据,使数据库瞬间压力剧增,解决方法有提前预热、设置永不过期、加锁限流等。缓存雪崩是大量key同时失效,导致所有请求直达数据库,可通过引入随机过期时间缓解。三者分别对应单点爆破、全面崩塌等问题,需根据场景选择合适策略优化系统性能与稳定性。
679 0
|
存储 缓存 NoSQL
如何解决缓存击穿?
缓存击穿是指热点数据失效时大量请求直接冲击数据库,可能导致系统崩溃。解决方案包括:永不过期策略避免缓存失效瞬间的穿透;互斥锁控制并发访问;热点预热提前刷新缓存;熔断降级在数据库压力大时返回默认值;二级缓存降低Redis压力。实际中常组合使用多种方案,如热点预热+互斥锁+熔断降级,以提升系统稳定性与性能。
1437 0
|
缓存 监控 安全
告别缓存击穿!Go 语言中的防并发神器:singleflight 包深度解析
在高并发场景中,多个请求同时访问同一资源易导致缓存击穿、数据库压力过大。Go 语言提供的 `singleflight` 包可将相同 key 的请求合并,仅执行一次实际操作,其余请求共享结果,有效降低系统负载。本文详解其原理、实现及典型应用场景,并附示例代码,助你掌握高并发优化技巧。
795 0
|
缓存 NoSQL 数据库
什么是缓存击穿
缓存击穿是指热点缓存key突然失效,导致大量并发请求直接冲击数据库,造成巨大压力。常见于高并发场景,如热门商品信息失效时。解决方法包括设置热点key永不过期、使用分布式锁、预热数据、熔断降级等,以保障系统稳定性。
1046 0
|
缓存 数据库
如何解决缓存穿透?
对请求增加校验机制,如ID格式和位数校验,避免无效请求;缓存空值或特殊值防止缓存穿透;使用布隆过滤器拦截不存在的请求,减轻数据库压力。
220 0
|
缓存 监控 NoSQL
Redis--缓存击穿、缓存穿透、缓存雪崩
缓存击穿、缓存穿透和缓存雪崩是Redis使用过程中可能遇到的常见问题。理解这些问题的成因并采取相应的解决措施,可以有效提升系统的稳定性和性能。在实际应用中,应根据具体场景,选择合适的解决方案,并持续监控和优化缓存策略,以应对不断变化的业务需求。
2269 29
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
1776 0
|
10月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
916 25
|
11月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
410 1
Redis专题-实战篇二-商户查询缓存