浅谈乐观锁的设计
前言 大家对 乐观锁 这三个字眼应该不陌生吧? 为什么今天我想谈谈乐观锁的设计呢? 关于数据库的乐观锁使用, 是不是很多人一看到乐观锁就会想到 Version 字段 (版本标识)。 ps: 其实不是非要新增版本字段 正文 乐观锁 , Optimistic Concurrency Control (乐观并发控制),简称 OCC 。 乐观锁不是一种真正的 ‘ 锁 ’,而是一种实现锁效果的 设计 思想 : 乐观地 认为 并发的操作对数据 不会产生冲突,所以没有使用 真正的 ‘锁’ 去对数据加锁; 而是选择在提交数据的时候,去 检测数据是否冲突 了? 发现冲突就采取 处理操作,例如报错、重试、停止等等。 设计 基于数据库使用展开介绍 使用版本标识 version 字段 也就是在 表内 增加一个字段 version 。 每次写操作如果时成功的,都需要 将 version 版本值 +1 , 例如原来 某条数据的 version值为 1, 如果修改了,那么 version就需要变成 version+ 1 , 也就是 2. 然而在并发场景,大量的写操作不免会发生冲突。 所以当我们 读取 数据, 需要做更新操作。 我们的 设计流程时这样的: 1. 读取数据,把数据里的version值 取出作为 更新前标识 值 version-before。 2.做业务逻辑计算等等 .... 3. 更新数据操作