当前位置: 首页 > news >正文

Redis更新缓存之双重检查 - 邓维

 
Redis更新缓存之双重检查

 

 

这是一个非常经典且重要的并发缓存设计模式。在缓存更新的逻辑中,在加锁前加锁后都去读取缓存,这通常被称为 “双重检查”(Double-Check),它的目的是为了解决高并发场景下的一些核心问题。

 

1、 核心思想与流程

这个模式最常见的应用场景是 “缓存重建”:当缓存失效(不存在)时,我们需要从数据库中加载数据并写入缓存。

如果没有锁,在超高并发下,会有大量请求同时发现缓存失效,然后同时去访问数据库,导致 “缓存击穿” 。加锁就是为了防止这种情况。

标准流程如下:

1. 第一重检查(锁外)

  • 请求到达,首先查询缓存。
  •  如果缓存存在:直接返回数据,流程结束。这是最快速的路径,避免了任何锁开销
  • 如果缓存不存在:进入下一步。

2. 加锁

  • 在尝试重建缓存之前,先获取一个分布式锁(如果是单机服务,可以用本地锁如 `synchronized` 或 `ReentrantLock`)。
  •  目的:确保同一时间只有一个线程/请求能够执行重建缓存的逻辑。


3. 第二重检查(锁内)

  • 在获得锁之后,再次查询缓存
  • 为什么? 因为在当前请求等待锁的期间,可能**已经有另一个先拿到锁的线程完成了缓存重建**。
  • 如果缓存存在:说明数据已经被其他线程写入了。那么当前线程直接释放锁,然后使用缓存中的数据即可,无需再访问数据库。
  • **如果缓存仍然不存在**:说明当前线程是第一个(也是唯一一个)需要去重建缓存的线程。进入下一步。


4. 执行业务逻辑 & 重建缓存

  • 从数据库查询数据。
  • 将数据写入缓存。
  • 释放锁。

 

为什么需要两次读取缓存?

我们可以通过一个生动的并发场景来理解:假设在某一时刻,缓存 `key=A` 失效,同时有 **1000 个并发请求** 涌入。

image

 

示例代码:

public String getData(String key) {// 第一重检查:锁外检查(快路径)String data = cache.get(key);if (data != null) {return data;}// 缓存不存在,尝试获取锁String lockKey = "lock:" + key;boolean locked = distributedLock.tryLock(lockKey);if (!locked) {// 没拿到锁,可以稍后重试,或者直接去查数据库(不推荐),这里我们简单等待一下再递归调用Thread.sleep(100);return getData(key);}try {// 第二重检查:锁内检查(双重检查)data = cache.get(key);if (data != null) {return data;}// 缓存确实为空,执行重建逻辑data = database.query(key);cache.set(key, data, ttl);return data;} finally {distributedLock.unlock(lockKey);}
}

总而言之,**加锁前读缓存是为了效率,加锁后读缓存是为了正确性和进一步的效率优化**。这是一个在高并发环境下兼顾性能与数据一致性的经典设计。

 

http://www.zskr.cn/news/55198.html

相关文章:

  • 2025年质量气体流量计直销厂家权威推荐榜单:超微量气体流量计/甲烷气体流量计/小口径气体流量计源头厂家精选
  • 2025 年 11 月开关柜厂家权威推荐榜单:高压开关柜,低压开关柜,智能开关柜,配电开关柜公司精选
  • 成都一对一家教机构推荐,2025最新辅导机构家长实测口碑榜
  • vscode没有开启自动保存引起的麻烦
  • 2025 年 11 月塑胶配件厂家推荐排行榜,塑胶外壳,塑胶组件,精密塑胶件,塑胶零件,塑胶边框,塑胶注塑件公司推荐
  • 2025 年 11 月高温老化房厂家推荐排行榜,老化室/高温老化室/高温房/熟化房/固化房,恒温恒湿室/恒温房/恒温恒湿房公司推荐
  • 快速下载huggingface模型 -----镜像 huggingface.co 域名
  • 黄山一对一家教辅导机构推荐:2025年综合实力权威排行榜,终极测评
  • 2025年铜陵一对一家教机构推荐:五大辅导机构测评排行榜,综合实力全解析!
  • 铜陵一对一家教辅导机构推荐:2025年综合实力权威排行榜,终极测评
  • 小程序文件下载与本地存储方案
  • 2025年分子对接结合能厂家权威推荐榜单:药物虚拟筛选/pymol分子对接/分子对接源头厂家精选
  • 第二天 哈希
  • 省着用,反而坏的更快
  • 2025年环保纸袋批发厂家权威推荐榜单:防油纸袋/打包纸袋/三边封纸袋源头厂家精选
  • 2025年建筑阳光板源头厂家权威推荐榜单:10mm阳光板/中空阳光板/阻燃阳光板生产厂家精选
  • 电流互感器技术方案深度解析:从传统电磁到新型光学方案
  • “省着用”,反而坏的越快?
  • 余氯水质分析仪厂家推荐:总氮/总磷/氨氮水质分析仪采购指南
  • 真正的宝藏都藏在小众软件里,这 6 个强到怀疑人生!
  • 【Spring Boot 报错已解除】别让端口配置卡壳!Spring Boot “Binding to target failed” 报错解决思路
  • 【第7章 I/O编程与异常】Python异常捕获终极指南:哪些能拦、哪些拦不住?(通俗+深度双解析)
  • DeepSeek-OCR本地部署教程:DeepSeek突破性开创上下文光学压缩,10倍效率重构文本处理范式 - 教程
  • 任何事物,都是用工具逻辑和方法策略去证明,而不是指定被某个人和组织去证明
  • GYM106007D-Master of the Arena
  • 20232416 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • 深入解析:【2B篇】阿里通义 Qwen3-VL 新增 2B、32B 两个模型尺寸,手机也能轻松运行
  • 2025北京托福机构TOP5榜单!无老师/新通领衔,提分率90%+机构全解析
  • 网络安全产品深度对比:Detectify与Halo Security的技术架构剖析
  • 托福提分认准这些!2025五大靠谱机构推荐,从基础到冲刺全覆盖