乐观锁介绍

1.乐观锁介绍

乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下2种方式

2.使用方法

版本号控制

版本号的实现方式有两种,一个是数据版本机制,一个是时间戳机制。具体如下。

a.使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。

3.代码实现

数据库表新增字段version,更新修改操作时,需要比较当前版本值是否相等,相等的话,每次修改值时,将版本号version+1,同一版本的数据只能有一次提交成功,其他提交时会因为version不一致导致修改失败

<update id="updateGoodsUseCAS" parameterType="Goods">  <![CDATA[ update t_goods set status=#{status},name=#{name},version=version+1 where id=#{id} and version=#{version} ]]>  
</update>  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始学习 GitHub 系列之「03.Git 速成」

前面的 GitHub 系列文章介绍过&#xff0c;GitHub 是基于 Git 的&#xff0c;所以也就意味着 Git 是基础&#xff0c;如果你不会 Git &#xff0c;那么接下来你完全继续不下去&#xff0c;所以今天的教程就来说说 Git &#xff0c;当然关于 Git 的知识单凭一篇文章肯定说不完的…

linux看缺省的编译器,修改Linux系统默认编辑器

pip和requests模块的安装1.配置python的环境变量 在path中加入pyhton的环境变量,如我的是E:\Python27 2. 如果没有pip,一个帮助软件管理的东东(现在的版本一般有,若有跳到3) 去https:// ...sp&lowbar;who&lowbar;lockUSE MyDataBase GO /****** Object: StoredProcedur…

Spring系列(一):Spring相关知识介绍笔记

目录 1、Srping概念 2、Spring原理 2.1 控制反转(Inversion of control)&#xff08;IOC&#xff09; 2.2 面向切面编程(Aspect-Oriented Programming)&#xff08;AOP&#xff09; 3、Spring框架结构 4、Srping生命周期 4、Srping有什么优势&#xff1f; 4.1、非侵入式设计 4.…

SDUT 3400 数据结构实验之排序三:bucket sort

数据结构实验之排序三&#xff1a;bucket sort Time Limit: 150MS Memory Limit: 65536KBSubmit StatisticProblem Description 根据人口普查结果&#xff0c;知道目前淄博市大约500万人口&#xff0c;你的任务是帮助人口普查办公室按年龄递增的顺序输出每个年龄有多少人&#…

nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException(Spring循环依赖问题)

1:问题 最近启动项目时候&#xff0c;遇到如下报错 nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name stockReceiptManager: Bean with name stockReceiptManager has been injected the bean. Thi…

linux分区设置大小,Linux调整磁盘分区大小

Resize the disk (Linux调整磁盘分区大小)Resize the partition. Run parted: $ partedShow the partition list: (parted) printThere should be two partitions; 1 should be a boot partition, about 64MB; the second should be the main partition, about 3.6GSome Disk C…

电脑技巧:盘点常用的Win组合快捷键

今天给大家继续分享电脑使用技巧&#xff0c;给大家介绍一下有哪些常用Win组合快捷键&#xff0c;希望可以对大家的日常办公提高帮助&#xff01; 1、WinE&#xff1a;打开我的电脑 超级实用的一个组合键&#xff0c;不论你当前在操作什么&#xff0c;只要按下这个组合键&#…

简单正则替换

var reganew RegExp(" ","g"); //创建正则RegExp对象 ntrstrntrstr.replace(rega,""); var regbnew RegExp(" ","g"); //创建正则RegExp对象 ntrstrntrstr.replace(regb,""); var regcnew Reg…

电脑技巧:电脑安装操作系统、重装系统常见的问题解决方法

目录 1、提示权限不足 2、添加PE开机引导菜单失败 3、磁盘格式错误 4、除系统盘外&#xff0c;未找到任何其他非系统磁盘分区 5、计算机意外地重新启动或遇到错误 6、windows无法完成安装 7、U盘安装系统时出现如下图错误 8、下载速度慢、卡住 重装系统现在也不是什么难事&…

linux开发板上程序如何调试,linux开发板调试典型方法

tftpdsudo apt-get install tftpd openbsd-inetd将/etc/inetd.conf中的最后一个路径设置成你希望让客户端存取文件的目录例如下面的“/tftpboot”(记得开放该目录的读写权限)&#xff1a;“tftp dgram udp wait nobody /usr/sbin/t…

电脑技巧:Win10电脑卡顿解决小技巧,非常实用

目录 1、及时关闭不常用的后台进程 2、建议打开GPU硬件加速功能 3、及时更新升级硬件驱动 4、适当降低Windows动画特效 5、开启Windows自带的游戏模式 电脑用的时间越久就会越卡顿了&#xff0c;今天小编给大家分享五个小技巧&#xff0c;来解决电脑卡顿的问题&#xff0c;有需…

线程其实就是一个个指令组成的,当这个线程内的指令全部执行完了,那么这个线程也就执行结束了

线程其实就是一个个指令组成的&#xff0c;当这个线程内的指令全部执行完了&#xff0c;那么这个线程也就执行结束了

page,client,offset区别

offset:相对于当前“盒子”的距离 &#xff0c;与滚动条无关 client:相对于可视区域的距离&#xff0c;与滚动条无关 page:相对于整个页面的距离&#xff0c;与滚动条有关 示例代码&#xff1a; 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 …

linux netbeans 中文乱码,浅谈Linux Netbeans字体反锯齿处理

用的Linux发行版是Ubuntu8.04&#xff0c;如果使用源里面的JDK一切都很简单(现在源里的版本是1.6u6)&#xff0c;JDK6开始支持反锯齿。装完Netbeans你就会惊喜的发现&#xff0c;仿原生GUI的界面(GTK&#xff0b;)上的文字是反锯齿的&#xff0c;但是编辑器里面的文字是锯齿的&…

Win10软件:推荐两款Windows操作系统下的远程软件,值得收藏!

远程控制软件是程序员日常必备的工具&#xff0c;现场市面上有微软自带的远程连接工具、向日葵、teamviewer等远程控制软件。他们都有一个共同的缺点&#xff0c;无法针对远程连接设置分组、别名。大多数情况下&#xff0c;我们可能需要连接十几个甚至几十个Windows远程服务器。…

开发机多用户 xdebug 远程调试 PhpStorm

在公司都用的远程开发机开发&#xff0c;每次有错误调试就得dd(xxx)然后保存真是&#xff0c;让我在本地开发用惯xdebug的情何以堪&#xff0c;所以有了下文。 1.安装配置xdebug 直接使用pecl安装即可# pecl install xdebug 然后写xdebug配置&#xff0c;下面是我的设置(具体扩…

linux查看 idt日志,实现RCP的日志管理

做插件开发的都知道当应用跑不起来了就去看看workspace里的.log文件&#xff0c;错误信息很详细,那样解决问题就方便多了&#xff0c;这个功能很好&#xff0c;所以学习了下&#xff0c;和大家分享下&#xff0c;实现的原理也就一行代码Java代码 Platform.getLog(Platform.getB…

电脑技巧:电脑内存不足解决小技巧

熟悉电脑硬件的朋友们都知道&#xff0c;内存相对于电脑来说是一个相当重要的部件&#xff0c;内存属于CPU的“工作室”&#xff0c;因为电脑所有运行的程序都是在内存中运行&#xff0c;它决定了多少、多大的程序能即时运行&#xff0c;如若执行的应用程序过大或者过多就会导致…

前端:分享一些实用的JS代码片段

今天给大家分享一些实用的JS代码片段&#xff0c;有需要的朋友欢迎收藏&#xff01;1、获取浏览器的版本function getBrowser() {var UserAgent navigator.userAgent.toLowerCase();var browserInfo {};var browserArray {IE: window.ActiveXObject || "ActiveXObject&…