Redis缓存穿透和雪崩相关概念(面试高频,工作常用)

服务的高可用

Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面,但同时,它也带来了一些问题,其中,最重要的问题,就是数据的一致性问题。从严格意义上讲,这个无解。如果对数据的一致性要求很高,那么就不能使用缓存。

另外的一些典型问题,缓存穿透,缓存雪崩和缓存击穿。目前,业界也都有比较流行的解决方案。

缓存穿透(查不到导致)

在这里插入图片描述

概念

​ 缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询,发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大压力,这时候就相当于出现了缓存穿透。(秒杀场景)

解决方案

布隆过滤器

布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免对底层存储系统的查询压力。
在这里插入图片描述

缓存空对象

当存储层不命中后,即使返回的空对象也就其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源

在这里插入图片描述

但是这种方法会存在两个问题:

  1. 如果空值能够被缓存起来,这就意味着缓存需要更多的空间存储更多的键,因为这当中可能会有很多的空值的键。
  2. 即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。

缓存击穿(查询量太大,缓存过期)

概念

这里需要注意和缓存击穿的区别,缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行询问。当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库就像一个屏幕上凿开了一个洞。

当某一个key在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新数据,并且回写缓存,会导致数据库瞬间压力过大。

解决方案

  • 设置热点数据永不过期

    从缓存层面来看,没有设置过期时间,所以不会出现热点key过期后产生的问题

  • 加互斥锁

    分布式锁:使用分布式锁,保证对于每一个key同时只有一个线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁的考验很大。

缓存雪崩

概念

缓存雪崩,是指在某一个时间段,缓存集中过期失效。redis宕机!

产生雪崩的原因之一,比如在写本文的时候,马上就要到双十二零点,很快就会迎来一波抢购,这波商品时间比较集中的放入了缓存,假设缓存一个小时。那么到了凌晨1点的时候,这批商品的缓存都过期了。而对这批商品访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。于是所有商品的请求都会达到存储层,存储层的调用量会爆增,造成存储层也会挂掉的情况。
在这里插入图片描述

其中集中过期,倒不是非常致命,比较致命的是缓存雪崩,是缓存服务器某个节点宕机或者断网。因为自然形成的缓存雪崩,一定是在某个时间段集中创建缓存,这个时候,数据库也是可以顶住压力的。无非就是对数据库产生周期性的压力而已。而缓存服务节点的宕机,对数据库服务器造成的压力是不可预知的,很多可能瞬间就把数据库压垮。

双十一:停掉一些服务,保证主要的服务可用。

解决方案

  • redis高可用

    这个思想的含义是,既然redis有可能挂掉,那多增设几台redis,这样一台挂掉之后其他的还可用继续工作,其实就是搭建的集群。

  • 限流降级

    这个解决方案的思想是,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

  • 数据预热

    数据预热的含义就是在正式部署之前,我先把可能的数据先预热先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发送大并发访问前手动触发加载到缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

<think>嗯,用户让我介绍一下基于Redis高频访问信息缓存,以及如何解决缓存穿透雪崩击穿的问题,并且还要提出相关面试问题。首先,我需要确保自己对这些概念有清晰的理解,然后才能组织出合适的面试问题。 首先,缓存穿透。我记得这是指查询一个不存在的数据,导致每次请求都直接打到数据库上。解决方法可能有布隆过滤器或者缓存空对象。但得确认这些方法的优缺点,比如布隆过滤器的误判率空间占用,缓存空对象的过期时间设置。 然后是缓存雪崩,这应该是大量缓存同时过期或者Redis宕机,导致数据库压力激增。解决方法可能包括随机过期时间、集群高可用,或者永不过期加后台更新。需要区分雪崩击穿的区别,雪崩是大面积失效,击穿是单个热点数据失效。 缓存击穿,指的是热点数据在过期瞬间,大量请求直接访问数据库。解决方法可能有互斥锁或者逻辑过期。互斥锁可能会影响性能,而逻辑过期需要后台更新,但数据可能不一致。 接下来,用户需要的是面试问题,所以需要从基础到进阶,覆盖原理、解决方案、实际应用场景。可能需要设计问题来考察候选人对这些概念的理解深度,以及解决实际问题的能力。 比如,基础问题可以问缓存穿透雪崩、击穿的区别,解决方案。进阶问题可能涉及布隆过滤器的实现原理,互斥锁的具体实现方式,比如Redis的setnx命令。还有实际场景题,让候选人设计一个防止雪崩的方案,或者如何处理热点数据突然过期的情况。 还要注意Redis数据结构,比如如何选择合适的数据结构来存储缓存,以及持久化策略对缓存的影响。可能还要涉及Redis集群的高可用方案,比如主从复制、哨兵、Cluster模式等。 需要确保问题覆盖全面,既有理论又有实践,同时考察候选人的问题解决能力经验。比如,是否知道预热缓存、降级策略、熔断机制等。 另外,可能还要考虑Redis的内存淘汰策略,比如LRU、LFU,不同策略在缓存场景中的应用。以及如何监控缓存的有效性,如何评估缓存命中率等运维相关的问题。 最后,要提醒候选人在回答时结合项目经验,举例说明他们是如何在实际项目中应用这些方案的,以展示实际操作能力。</think>以下是为"Redis缓存高频访问与三⼤缓存问题"主题整理的20个典型⾯试题及考察要点分层说明: --- ### ⼀、基础原理层(5题) 1. **缓存穿透/雪崩/击穿三者的核⼼区别是什么?** - 穿透:**恶意访问不存在数据** - 雪崩:**⼤⾯积缓存同时失效** - 击穿:**单个热点缓存失效后并发冲击** 2. **描述布隆过滤器防穿透的⼯作原理** - 要点:**位数组+哈希函数、存在误判率、空间效率优势** 3. **缓存空对象⽅案如何处理数据更新问题?** - 需答出:**设置较短的过期时间、异步更新策略** 4. **缓存雪崩的随机过期时间⽅案如何实现?** - 公式示例:$$ T_{real} = T_{base} + random(0, T_{variance}) $$ 5. **互斥锁解决击穿问题时,为什么要⽤SETNX⽽不是普通的加锁?** - 关键点:**Redis原⼦性操作、防⽌分布式锁冲突** --- ### ⼆、进阶设计层(8题) 6. **如何设计⼀个带熔断机制的缓存系统?** - 需包含:**请求量阈值监控、降级策略、恢复机制** 7. **逻辑过期⽅案中,如何实现后台异步更新?** - 典型流程:**获取过期标识→触发更新任务→返回旧数据** 8. **布隆过滤器如何应对数据库扩容?** - 难点说明:**需要重建过滤器、采⽤可扩展布隆过滤器** 9. **热点Key发现⽅案有哪些?** - 参考答案:**客户端统计、代理层监控、Redis监控命令** 10. **如何通过双缓存策略防击穿?** - 结构示例: ```text 主缓存:正常过期时间 备份缓存:更⻓过期时间 ``` 11. **Redis持久化策略对缓存恢复的影响?** - 需⽐较:**RDB快照恢复速度 vs AOF数据完整性** 12. **缓存预热的具体实施⽅案?** - 要点:**启动时加载热点数据、历史访问数据分析** 13. **如何通过限流保护数据库?** - 技术栈举例:**Redis-Cell模块、令牌桶算法实现** --- ### 三、综合实战层(7题) 14. **设计⼀个电商秒杀系统的缓存架构** - 考察点:**热点库存缓存、本地缓存+Redis多级缓存、库存扣减⽅式** 15. **当缓存数据库⼀致性发⽣冲突时如何取舍?** - 需分析:**CAP理论中的CP/AP选择、业务场景特性** 16. **如何优化⼤Value缓存导致的性能问题?** - 解决思路:**数据压缩、分片存储、使⽤更合适的数据结构** 17. **处理缓存数据的常⽤⼿段?** - 组合⽅案:**设置合理的过期时间+版本号机制+延迟双删** 18. **如何实现缓存资源的动态扩容?** - 集群⽅案:**Redis Cluster的槽位迁移原理** 19. **设计⼀个实时监控缓存健康度的系统** - 关键指标:**命中率、响应时间、内存使⽤率、淘汰率** 20. **当发现缓存命中率持续下降时,你的排查思路?** - 排查路径:**热点Key分析→过期策略检查→业务查询模式变化→内存碎⽚情况** --- ### 四、深度扩展题(附加) - **Redis6.0新特性对缓存优化的影响?** - 重点:**多线程IO、客户端缓存(Client-side caching)** - **如何应⽤机器学习预测缓存失效?** - 创新点:**基于历史访问模式的智能过期时间调整** --- 以上问题设计覆盖**原理理解→⽅案设计→系统架构→故障排查**的知识链条,建议候选⼈在准备时: 1. 结合具体项⽬经验说明 2. 对每个解决⽅案要能说明优缺点 3. 重点掌握布隆过滤器、分布式锁、熔断降级等核⼼技术点的实现细节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只努力的笨笨熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值