博客
关于我
纯干货!深度分析一下AQS原理,一文全懂
阅读量:531 次
发布时间:2019-03-09

本文共 869 字,大约阅读时间需要 2 分钟。

Spring缓存问题解析:缓存雪崩、穿透与击穿

作为开发人员,与Spring相关的问题无疑是面试中的重头戏。为了帮助大家更好地理解常见问题,我将从缓存雪崩、穿透到击穿进行详细分析。


一、缓存雪崩

缓存雪崩的本质是Redis缓存在短时间内大量失效。通常发生在高并发场景下,比如双十一当天的核心数据缓存失效。

What is Cache雪崩?

当Redis缓存中的多个key在同一时间失效,所有请求直接打击数据库,导致服务器瘫痪。以双十一首页数据为例,Redis缓存的失效时间设置为2小时,双十一访问量大,超过两个小时后的失效将导致Redis全部请求转发至数据库。


解决方案

  • 分散失效时间:确保不同key有不同的失效时间,避免集中失效。
  • Redis集群部署:将热点key分散到不同节点,避免单点压力。
  • 永不过期:某些场景下直接使用永不过期的缓存策略。

  • 二、缓存穿透

    缓存穿透是指攻击者利用特定方法绕过Redis,直接攻击数据库。典型方法是利用负数ID或其他无效参数。

    Understanding Buffer Overflow攻击

    攻击者通过发起大量请求,利用负数ID等特定参数,从而避开Redis缓存转发,直接打击数据库。

    解决方案

  • 数据库缓存写回机制:在Redis未找到数据时,直接将结果写入Redis缓存。
  • 参数合法性校验:过滤恶意请求,拒绝无效参数。
  • 布隆过滤器:用于快速识别恶意源IP,防止攻击。
  • IP黑名单:直接拉黑源IP。

  • 三、缓存击穿

    缓存击穿是指某个特定key瞬间失效,导致大量请求直接转发至数据库。常见于热门数据突发需求。

    What is Cache击穿?

    以网络拍卖为例, Redis缓存key在短时间内失效,所有请求打击数据库,导致高并发下服务器崩溃。

    解决方案

  • 永不过期:对于热点key,直接不设置失效时间。
  • 分布式锁:确保多次请求只处理一个,避免重复处理。

  • 总结

    缓存问题的关键在于预防。针对雪崩、穿透、击穿等问题,可以通过合理的缓存策略和系统设计来提前规避风险。掌握这些解决方法,是成为一名优秀开发者的关键所在。

    转载地址:http://svksz.baihongyu.com/

    你可能感兴趣的文章
    python-计网实验二-套接字
    查看>>
    C++学习日记2——多态篇的纯虚函数和抽象类
    查看>>
    F - 数据结构实验之链表四:有序链表的归并
    查看>>
    为什么使用%lf读取double型的值,而用%f进行显示?
    查看>>
    用JavaScript实现希尔排序
    查看>>
    iconfont字体图标导入到vue项目中
    查看>>
    2020.11.30-12.6周报
    查看>>
    Nuxt.js服务器端渲染框架
    查看>>
    Svn commit failed aborting commit
    查看>>
    卧槽!细说JVM内存模型,已拿到offer
    查看>>
    带你一起手撕Dubbo,SpringBoot与Cloud,深入剖析
    查看>>
    dynamo中如何通过节点读取cad图纸数据
    查看>>
    纯干货!深度分析一下AQS原理,一文全懂
    查看>>
    腾讯Java面试题,从基础到源码统统帮你搞定,2年以上经验必看
    查看>>
    字节跳动算法工程师总结:腾讯+字节+阿里面经真题汇总,含面试题+答案
    查看>>
    LeetCode 22. 括号生成
    查看>>
    (二)MyBatis学习笔记——使用映射配置文件进行CRUD、核心配置文件使用
    查看>>
    LeetCode 76. 最小覆盖子串
    查看>>
    架构 -- rsync补充02
    查看>>
    shell基础 - 03
    查看>>