当前位置: 首页 > 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.jsqmd.com/news/45568/

相关文章:

  • SSH 客户端 MobarXterm 安装和使用笔记
  • 已有ERP和MES,为什么还需要质量管理系统(QMS)?
  • 2025年质量气体流量计直销厂家权威推荐榜单:超微量气体流量计/甲烷气体流量计/小口径气体流量计源头厂家精选
  • SBD3D60V1H-ASEMI可直接替代安世PMEG6010CEJ
  • 机器学习之决策树模型
  • 重庆一对一辅导机构精选推荐,2025合规家教机构口碑排名已公布,附师资实力测评
  • 251119D. mod
  • 2025 年 11 月开关柜厂家权威推荐榜单:高压开关柜,低压开关柜,智能开关柜,配电开关柜公司精选
  • 西门子MES已有质量模块,为何再斥资收购QMS?
  • 2025 年 11 月开关柜供应厂家推荐排行榜,高压开关柜,低压开关柜,配电开关柜,智能开关柜公司推荐
  • 重庆一对一家教机构口碑推荐,2025辅导机构最新排名出炉,带详细选课攻略
  • 成都一对一家教机构推荐,2025最新辅导机构家长实测口碑榜
  • 2025 年 11 月聚氨酯厂家推荐排行榜,聚氨酯组合料/黑白料/AB料/管道料/发泡剂,外墙/冷库聚氨酯保温材料公司精选
  • 2025 年 11 月轴承厂家推荐排行榜,瓦房店轴承,深沟球轴承,调心滚子轴承,圆锥滚子轴承源头厂家实力解析与选购指南
  • vscode没有开启自动保存引起的麻烦
  • 2025 年 11 月塑胶配件厂家推荐排行榜,塑胶外壳,塑胶组件,精密塑胶件,塑胶零件,塑胶边框,塑胶注塑件公司推荐
  • 2025 年 11 月高温老化房厂家推荐排行榜,老化室/高温老化室/高温房/熟化房/固化房,恒温恒湿室/恒温房/恒温恒湿房公司推荐
  • 快速下载huggingface模型 -----镜像 huggingface.co 域名
  • 黄山一对一家教辅导机构推荐:2025年综合实力权威排行榜,终极测评
  • 第四讲自注意力机制self-attention
  • 2025年锌铝镁电缆桥架厂家权威推荐榜单:槽式电缆桥架/模压节能电缆桥架/防火电缆桥架源头厂家精选
  • FFT(Friends and Family Test即亲友测试)
  • 2025年铜陵一对一家教机构推荐:五大辅导机构测评排行榜,综合实力全解析!
  • 小程序文件下载与本地存储方案
  • 铜陵一对一家教辅导机构推荐:2025年综合实力权威排行榜,终极测评
  • 2025安庆一对一家教机构推荐:五大辅导机构测评排行榜,综合实力全解析!
  • 2025年分子对接结合能厂家权威推荐榜单:药物虚拟筛选/pymol分子对接/分子对接源头厂家精选
  • 第二天 哈希
  • 邵阳一对一家教辅导机构推荐:2025年最新权威榜,全学段提分不踩坑
  • 衡阳一对一家教辅导机构推荐:2025年真实测评榜单