每日见闻之缓存击穿跟缓存穿透的理解

1. 缓存穿透

  • 定义 :指请求查询的数据在缓存和数据库中都不存在,导致每次请求都会穿透缓存,直接落到数据库上。

  • 场景 :例如查询一个不存在的用户 ID(如id=-1),缓存中没有,数据库中也没有,因此每次请求都会访问数据库。

  • 危害:如果有大量此类请求(如恶意攻击),会直接压垮数据库,导致服务不可用。

  • 解决方案

    • 对不存在的数据,在缓存中设置一个 "空值"(如null),并设置较短的过期时间,避免频繁访问数据库。
    • 使用布隆过滤器(Bloom Filter)提前过滤不存在的请求,减少对数据库的冲击。

2. 缓存击穿

  • 定义 :指某个热点数据在缓存中过期(失效)的瞬间,有大量并发请求同时访问该数据,导致所有请求都穿透到数据库,造成数据库压力骤增。

  • 场景:例如某商品的详情页是热点数据,缓存过期的瞬间,大量用户同时访问,此时缓存未命中,所有请求都会去查询数据库。

  • 危害:短期内大量请求冲击数据库,可能导致数据库过载。

  • 解决方案

    • 热点数据设置 "永不过期"(或超长过期时间),通过后台异步任务更新缓存。
    • 加互斥锁(如 Redis 的SETNX),当缓存失效时,只允许一个请求去数据库查询并更新缓存,其他请求等待重试。
    • 提前预热热点数据,在过期前主动更新缓存。

简单来说:穿透是 "查不到的数据一直查",击穿是 "查到的数据过期瞬间被狂查"。

相关推荐
墨染青竹梦悠然1 小时前
基于Django+vue的图书借阅管理系统
前端·vue.js·后端·python·django·毕业设计·毕设
怪兽毕设1 小时前
基于Django的洗衣服务平台设计与实现
后端·python·django·洗衣服务平台
程序员泠零澪回家种桔子2 小时前
微服务日志治理:ELK 栈实战指南
后端·elk·微服务·云原生·架构
qq_12498707532 小时前
基于html的书城阅读器系统的设计与实现(源码+论文+部署+安装)
前端·vue.js·spring boot·后端·mysql·信息可视化·html
CodeToGym2 小时前
【全栈进阶】Spring Boot 整合 WebSocket 实战:从实时告警到金融行情推送
java·后端·spring
Leinwin2 小时前
Moltbot 部署至 Azure Web App 完整指南:从本地到云端的安全高效跃迁
后端·python·flask
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于Springboot个人健康运动系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
愿你天黑有灯下雨有伞2 小时前
Spring Boot + FastExcel:打造完美的导入校验功能
java·spring boot·后端
云霄IT2 小时前
go语言post请求遭遇403反爬解决tls/ja3指纹或Cloudflare防护
开发语言·后端·golang
Dragon Wu3 小时前
OpenAPI 3.0(Swagger3/Knife4j)完整简洁注解清单
spring boot·后端·springboot