美文网首页
数据库乐观锁实现

数据库乐观锁实现

作者: 万物皆有序和公式 | 来源:发表于2020-03-11 17:18 被阅读0次

乐观锁的实现
使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据
1.数据库表设计
task表有三个字段,分别是id,value、version
2.实现
1. 先读task表的数据(实际上这个表只有一条记录),得到version的值为versionValue
2 .每次更新task表中的value字段时,为了防止发生冲突,需要这样操作
update task set value = newValue, version = versionValue + 1 where version = versionValue
只有这条语句执行了,才表明本次更新value字段的值成功
如假设有两个节点A和B都要更新task表中的value字段值,差不多在同一时刻,A节点和B节点从task表中读到的version值为2,那么A节点和B节点在更新value字段值的时候,都操作 update task set value = newValue,version = 3 where version = 2;,实际上只有1个节点执行该SQL语句成功,假设A节点执行成功,那么此时task表的version字段的值是3,B节点再操作update task set value = newValue,version = 3 where version = 2;这条SQL语句是不执行的,这样就保证了更新task表时不发生冲突

相关文章

  • 乐观锁、悲观锁(共享锁S和排他锁X)总结

    乐观锁 乐观锁不是数据库自带的,需要我们自己去实现。乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作...

  • 分布式锁的实现

    分布式锁的实现 使用数据库乐观锁 乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(...

  • 乐观锁,悲观锁,防重表的思考

    乐观锁: java当中 cas属于 乐观锁 数据库中一般通过 version 版本号实现 悲观锁: java当中 ...

  • 数据库相关

    一、乐观锁和悲观锁 数据库实现并发控制的手段一般分为乐观锁和悲观锁。 悲观锁: 当我们要对一个数据库中的一条...

  • Java分布式锁三种实现方案

    方案一:数据库乐观锁 乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonu...

  • Java分布式锁三种实现方案

    方案一:数据库乐观锁 乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonu...

  • 秒杀系统技术方案演变过程

    前言:秒杀系统需要保证商品库存不能出现超卖现象。一、数据库锁机制(悲观锁、乐观锁)实现秒杀(1)悲观锁:数据库本身...

  • Redis分布式锁

    一、分布式锁实现方式 1. 数据库乐观锁。(增加字段版本标识version控制实现)2. Redis的分布式锁。(...

  • 基于redis的分布式锁的分析与实践

    前言:在分布式环境中,我们经常使用锁来进行并发控制,锁可分为乐观锁和悲观锁,基于数据库版本戳的实现是乐观锁,基于r...

  • 分布式锁的三种实现方式

    1. 概述 2. 特点 3. 实现方式 4. 数据库实现4.1. 前提4.1.1. 乐观锁4.1.2. 悲观锁4....

网友评论

      本文标题:数据库乐观锁实现

      本文链接:https://www.haomeiwen.com/subject/vikhjhtx.html