悲观锁、乐观锁与三大分布式锁总结

1. 悲观锁与乐观锁 1.1 悲观锁 核心思想:默认一定会存在资源竞争,提前锁定资源独占使用,其他请求阻塞等待,使用完毕再释放锁 特点:先上锁,执行业务,阻塞其他并发请求 1.2 乐观锁 核心思想:默认并发冲突极少发生,不主动加排他锁,所有请求并行执行,出现冲突后再做重试、回滚处理 特点:执行业务在前,冲突处理在后,全程不阻塞其他请求 特别注意:纯版本号乐观锁,作用是解决多人并发修改冲突,无法用于拦截单人重复提交;误用会触发不必要的并发修改异常,业务语义错乱。 2. Redis 分布式锁 异步弱一致、看门狗续命、自旋抢锁、存在丢锁风险 存储唯一uuid标识锁持有者,防止误删除他人锁 2.1 数据结构 2.1.1 简易普通分布式锁(String 类型) 结构:String Key → Value Key:lock:stock:1001 Value:唯一随机 UUID(锁持有者标识) 附带:expire 自动过期时间 无内置版本号,value仅做身份标识,无序无递增时序 2.1.2 Redisson 可重入分布式锁(Hash 类型) Hash Key:lock:stock:1001 Hash Field:客户端ID + 线程ID Hash Value:锁重入次数 附带:全局过期时间 示例: lock:stock:1001 ├─ client001-thread1 : 2 // 重入2次 └─ client002-thread2 : 0 2.2 实现流程 2.2.1 抢锁 生成唯一随机token; 执行原子命令 SETNX key token EX 过期时间 key:锁名称 value:唯一随机标识 NX:不存在才创建 EX:过期时间秒 SET lock:order:1001 uuid_8888 NX EX 30 命令返回成功 = 抢到锁,失败 = 未抢到。 ...

May 4, 2026 · 2 min · 240 words · Jamaisvu