flowchart TD
subgraph 分布式锁类型
A[悲观锁] --> B[Redis SET NX]
A --> C[ZooKeeper节点]
D[乐观锁] --> E[CAS操作]
D --> F[版本号控制]
end
subgraph Redis锁实现机制
G[SET命令参数] --> H[NX - 不存在才设置]
G --> I[PX/EX - 过期时间]
G --> J[唯一Value - 防误删]
K[获取锁流程] --> L[SET lock key NX PX 30000]
L --> M{获取成功?}
M -->|是| N[执行业务逻辑]
M -->|否| O[等待/重试/放弃]
N --> P[释放锁]
P --> Q[Lua脚本校验+删除]
R[锁续期机制] --> S[看门狗线程]
S --> T[定时延长过期时间]
S --> U[业务完成停止续期]
end
subgraph 锁安全性保障
V[原子性操作] --> W[Redis单命令原子性]
V --> X[Lua脚本原子性]
Y[超时机制] --> Z[自动释放避免死锁]
Y --> AA[防止锁无限持有]
AB[唯一标识] --> AC[UUID/Random]
AC --> AD[避免误删他人锁]
end
subgraph 分布式锁问题
AE[锁竞争] --> AF[高并发争抢]
AF --> AG[性能下降]
AH[锁超时] --> AI[业务未完成锁释放]
AI --> AJ[数据不一致]
AI --> AK[锁续期解决方案]
AL[锁重入] --> AM[同一线程多次获取]
AM --> AN[Redis不原生支持]
AO[集群一致性] --> AP[主从切换丢失]
AP --> AQ[RedLock算法]
end
subgraph 分布式锁选型
AR[Redis锁] --> AS[高吞吐低延迟]
AR --> AT[实现简单]
AR --> AU[适用于大部分场景]
AV[ZooKeeper锁] --> AW[强一致性]
AV --> AX[支持重入锁]
AV --> AY[适用于强一致场景]
AZ[数据库锁] --> BA[基于主键唯一约束]
AZ --> BB[性能较低]
BA --> BC[适用于小型系统]
end
subgraph 锁优化策略
BD[分段锁] --> BE[按Key分片]
BE --> BF[减少锁粒度]
BG[读写锁分离] --> BH[读锁共享]
BH --> BI[写锁互斥]
BJ[锁降级] --> BK[高并发时降级]
BK --> BL[牺牲一致性换性能]
BM[异步处理] --> BN[消息队列解耦]
BN --> BO[避免长时间持锁]
end
A --> G
G --> V
V --> AE
AE --> AR
AR --> BD