分布式读写锁 (Distributed Read-Write Lock) 是一种通过将并发读写操作串行化,来保证数据库与缓存之间绝对强一致性的方案。

核心逻辑

利用分布式锁(如 Redisson 的 RReadWriteLock)将读写操作解耦:

  • 读锁 (Shared Lock):允许多个线程同时读取,但会阻塞写操作。
  • 写锁 (Exclusive Lock):同一时间只允许一个线程写入,且会阻塞所有读操作。
操作类型逻辑步骤锁行为
读请求加读锁 查缓存/回填 释放读锁读读并行,读写互斥
写请求加写锁 更新 DB 删缓存 释放写锁写写互斥,写读互斥
sequenceDiagram
    participant Reader as 读请求
    participant Lock as 分布式锁 (Redis)
    participant Writer as 写请求

    Writer->>Lock: 1. 获取写锁 (Exclusive)
    Note over Writer, Lock: 阻塞后续所有读写
    Reader->>Lock: 2. 尝试获取读锁
    Lock-->>Reader: 3. 阻塞等待...
    Writer->>Writer: 4. 更新 DB & 删缓存
    Writer->>Lock: 5. 释放写锁
    Lock-->>Reader: 6. 获得读锁
    Reader->>Reader: 7. 读取数据
    Reader->>Lock: 8. 释放读锁

痛点与对策

挑战技术对策
性能损耗仅在对一致性要求极高的核心业务(如余额、库存)使用
锁超时/死锁必须设置合理的 leaseTime 并配合 try-finally 确保释放
单点故障使用 Redlock 算法或高可用 Redis 集群(如 Redis Cluster/Sentinel)