网站免费高清素材软件,学服装设计后悔死了,应用商店下载软件,商丘高端网站建设redis——缓存击穿 缓存击穿核心特征 缓存击穿的解决方案互斥锁#xff08;Mutex Lock#xff09;方案逻辑过期#xff08;Logical Expiration#xff09; 缓存击穿
缓存击穿是指某个热点key在缓存过期失效的瞬间#xff0c;同时有大量请求涌入#xff0c;直接穿… redis——缓存击穿 缓存击穿核心特征 缓存击穿的解决方案互斥锁Mutex Lock方案逻辑过期Logical Expiration 缓存击穿
缓存击穿是指某个热点key在缓存过期失效的瞬间同时有大量请求涌入直接穿透缓存访问数据库的现象。
核心特征
针对的是热点数据高频访问的key发生在缓存失效的瞬间造成数据库瞬时高并发压力数据真实存在于数据库
缓存击穿的解决方案
互斥锁Mutex Lock方案
核心思想使用分布式锁保证只有一个线程重建缓存 适用场景写操作较少的动态数据 优势强一致性 #mermaid-svg-hbN5I8N6yqblAmYi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hbN5I8N6yqblAmYi .error-icon{fill:#552222;}#mermaid-svg-hbN5I8N6yqblAmYi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hbN5I8N6yqblAmYi .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hbN5I8N6yqblAmYi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hbN5I8N6yqblAmYi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hbN5I8N6yqblAmYi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hbN5I8N6yqblAmYi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hbN5I8N6yqblAmYi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hbN5I8N6yqblAmYi .marker.cross{stroke:#333333;}#mermaid-svg-hbN5I8N6yqblAmYi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hbN5I8N6yqblAmYi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hbN5I8N6yqblAmYi .cluster-label text{fill:#333;}#mermaid-svg-hbN5I8N6yqblAmYi .cluster-label span{color:#333;}#mermaid-svg-hbN5I8N6yqblAmYi .label text,#mermaid-svg-hbN5I8N6yqblAmYi span{fill:#333;color:#333;}#mermaid-svg-hbN5I8N6yqblAmYi .node rect,#mermaid-svg-hbN5I8N6yqblAmYi .node circle,#mermaid-svg-hbN5I8N6yqblAmYi .node ellipse,#mermaid-svg-hbN5I8N6yqblAmYi .node polygon,#mermaid-svg-hbN5I8N6yqblAmYi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hbN5I8N6yqblAmYi .node .label{text-align:center;}#mermaid-svg-hbN5I8N6yqblAmYi .node.clickable{cursor:pointer;}#mermaid-svg-hbN5I8N6yqblAmYi .arrowheadPath{fill:#333333;}#mermaid-svg-hbN5I8N6yqblAmYi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hbN5I8N6yqblAmYi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hbN5I8N6yqblAmYi .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-hbN5I8N6yqblAmYi .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-hbN5I8N6yqblAmYi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hbN5I8N6yqblAmYi .cluster text{fill:#333;}#mermaid-svg-hbN5I8N6yqblAmYi .cluster span{color:#333;}#mermaid-svg-hbN5I8N6yqblAmYi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hbN5I8N6yqblAmYi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-hbN5I8N6yqblAmYi .green*{fill:#9f9!important;stroke:#090!important;}#mermaid-svg-hbN5I8N6yqblAmYi .green span{fill:#9f9!important;stroke:#090!important;}#mermaid-svg-hbN5I8N6yqblAmYi .red*{fill:#f99!important;stroke:#900!important;}#mermaid-svg-hbN5I8N6yqblAmYi .red span{fill:#f99!important;stroke:#900!important;}#mermaid-svg-hbN5I8N6yqblAmYi .blue*{fill:#99f!important;stroke:#009!important;}#mermaid-svg-hbN5I8N6yqblAmYi .blue span{fill:#99f!important;stroke:#009!important;} 存在 不存在 是 否 等待后 降级 客户端请求数据 缓存存在? 返回缓存数据 尝试获取分布式锁 获取锁成功? 查询数据库 写入缓存 释放锁 等待重试或降级 返回默认数据 逻辑过期Logical Expiration
核心思想物理永不过期通过逻辑字段控制有效性 适用场景极高热度的静态数据如商品基础信息 优势渐进式更新通过异步线程更新缓存避免瞬时负载 #mermaid-svg-XeS8mz6qSH65AnjD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XeS8mz6qSH65AnjD .error-icon{fill:#552222;}#mermaid-svg-XeS8mz6qSH65AnjD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XeS8mz6qSH65AnjD .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-XeS8mz6qSH65AnjD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XeS8mz6qSH65AnjD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XeS8mz6qSH65AnjD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XeS8mz6qSH65AnjD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XeS8mz6qSH65AnjD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XeS8mz6qSH65AnjD .marker.cross{stroke:#333333;}#mermaid-svg-XeS8mz6qSH65AnjD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XeS8mz6qSH65AnjD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XeS8mz6qSH65AnjD .cluster-label text{fill:#333;}#mermaid-svg-XeS8mz6qSH65AnjD .cluster-label span{color:#333;}#mermaid-svg-XeS8mz6qSH65AnjD .label text,#mermaid-svg-XeS8mz6qSH65AnjD span{fill:#333;color:#333;}#mermaid-svg-XeS8mz6qSH65AnjD .node rect,#mermaid-svg-XeS8mz6qSH65AnjD .node circle,#mermaid-svg-XeS8mz6qSH65AnjD .node ellipse,#mermaid-svg-XeS8mz6qSH65AnjD .node polygon,#mermaid-svg-XeS8mz6qSH65AnjD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XeS8mz6qSH65AnjD .node .label{text-align:center;}#mermaid-svg-XeS8mz6qSH65AnjD .node.clickable{cursor:pointer;}#mermaid-svg-XeS8mz6qSH65AnjD .arrowheadPath{fill:#333333;}#mermaid-svg-XeS8mz6qSH65AnjD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XeS8mz6qSH65AnjD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XeS8mz6qSH65AnjD .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-XeS8mz6qSH65AnjD .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-XeS8mz6qSH65AnjD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XeS8mz6qSH65AnjD .cluster text{fill:#333;}#mermaid-svg-XeS8mz6qSH65AnjD .cluster span{color:#333;}#mermaid-svg-XeS8mz6qSH65AnjD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XeS8mz6qSH65AnjD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-XeS8mz6qSH65AnjD .green*{fill:#9f9!important;stroke:#090!important;}#mermaid-svg-XeS8mz6qSH65AnjD .green span{fill:#9f9!important;stroke:#090!important;}#mermaid-svg-XeS8mz6qSH65AnjD .blue*{fill:#99f!important;stroke:#009!important;}#mermaid-svg-XeS8mz6qSH65AnjD .blue span{fill:#99f!important;stroke:#009!important;}#mermaid-svg-XeS8mz6qSH65AnjD .orange*{fill:#fc9!important;stroke:#f90!important;}#mermaid-svg-XeS8mz6qSH65AnjD .orange span{fill:#fc9!important;stroke:#f90!important;}#mermaid-svg-XeS8mz6qSH65AnjD .purple*{fill:#c9f!important;stroke:#90f!important;}#mermaid-svg-XeS8mz6qSH65AnjD .purple span{fill:#c9f!important;stroke:#90f!important;} 不存在 存在 未过期 已过期 是 否 客户端请求数据 缓存存在? 查询数据库并全量写入 返回新数据 逻辑是否过期? 返回缓存数据 尝试获取更新锁 获锁成功? 立即返回当前过期数据同时异步更新 异步流程:1. 查询最新数据2. 更新缓存3. 释放锁 返回当前过期数据