博客
关于我
纯干货!深度分析一下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/

    你可能感兴趣的文章
    VTK:Render之RenderView
    查看>>
    VTK:可视化之AlphaFrequency
    查看>>
    重复点击事件(仅限于路由)
    查看>>
    VTK:可视化之AnnotatedCubeActor
    查看>>
    VTK:可视化之Arbitrary3DCursor
    查看>>
    VTK:可视化之Arbitrary3DCursor
    查看>>
    VTK:可视化之BackfaceCulling
    查看>>
    VTK:可视化之LoopShrink
    查看>>
    li 修改前面小圆点的颜色
    查看>>
    vue h5 真机调试
    查看>>
    Java 内存分配详解(六)
    查看>>
    在内存中java类和对象的区别
    查看>>
    虚拟机virtualbox设置界面最大化
    查看>>
    Java处理时间Date
    查看>>
    CentOS 7 修改ip、MAC、UUID
    查看>>
    go语言中select实现优先级
    查看>>
    web前端-CSS-字体属性
    查看>>
    web前端-CSS-媒体查询响应式和多列
    查看>>
    yolov2.cfg与yolov3配置文件参数解析
    查看>>
    【leetcode-字符串】外观数列
    查看>>