乐观锁的核心不是先把数据锁住,而是更新时确认数据有没有被别人改过。适合读多写少、冲突概率不高的场景。
最常见的实现方式
最常见的是版本号方案。读取数据时带出 version,更新时执行类似 where id = ? and version = ? 的条件,并把版本号加一。
如果更新结果是 0 行,说明这条记录已经被别人改过,本次更新应当失败并由业务决定是否重试。
除了版本号还有什么办法
也可以用时间戳或状态字段做条件更新,但可读性和稳定性通常不如单独的版本号字段。只要能在更新时校验“我读取的还是不是最新版本”,本质上都属于乐观锁。
适用场景
库存扣减、账户资料编辑、后台配置修改这类并发不算极端、但又不能互相覆盖的场景,都很适合乐观锁。
一句话理解
乐观锁不是先锁住别人,而是提交时再确认这份数据是不是还属于你刚才读到的版本。
正文完




