博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
悲观锁和乐观锁
阅读量:6327 次
发布时间:2019-06-22

本文共 815 字,大约阅读时间需要 2 分钟。

          前几天有人问了我一个问题。说假设数据库某些操作不用事务,那么又须要保持数据的一致性,那么该用什么方法替代事务。我就想到了悲观锁和乐观锁的思想,以下我解释一下在数据库中的悲观锁和乐观锁

        1.悲观锁就是把数据库的一些操作,放在事务其中,依赖数据库的隔离级别,实现对数据改动的封锁。这样做数据一致性能够保持的非常好。可是效率比較低下,悲观锁从程序的角度上将。就是不在应用程序中做不论什么保证数据一致性操作,而是把操作放在事务中,把保证数据一致性的任务,交给数据库去做,也就是依赖数据库的锁机制。

        2.乐观锁事实上从真正意义上并非锁,是一种取代事务的操作。在应用程序中,假设一个事务不是太复杂,又能容忍数据的更新失败,而且能够尝试反复更新,那么能够考虑用乐观锁来替代事务,即不通过事务来保证数据的一致性,而是通过在程序中的一些操作来保证数据的一致性,防止丢失更新,我们解决办法就是在数据表中添加一个版本号号的字段,版本号号能够用整数来做,假设实时性要求不高的话,还能够用时间戳做为版本号号,就是每份数据都会维护自己的一个数据版本号号。假设更新数据的时候发现数据库中的版本号小于我们自己数据的版本号,那么就证明数据库中的数据没有我们自己的数据新,那么更新数据库中的版本号号为最新的版本号号;假设更新数据的时候发现数据库中的版本号大于等于我们自己数据的版本号就证明,我们自己的数据已经过时,所以返回给程序更新失败的信息,那么我们能够添加版本号号的值,如使用时间戳。再一次去尝试更新数据。

      悲观锁与乐观锁的差别:

         悲观锁是一种排他锁,效率低下,可是数据安全。一般实如今数据库中。不是实如今应用程序中,乐观锁准备说不是一种锁机制,它是应用程序自己加的一种保证数据一致性的机制。所以一般实如今应用程序中,而不是实如今数据库中。而且在hibernate中我们能够显示配置悲观锁乐观锁,当然乐观锁须要在配置文件里配置version属性(用来充当版本)。

转载地址:http://vrgaa.baihongyu.com/

你可能感兴趣的文章
Matlab基于学习------------------函数微分学
查看>>
ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
查看>>
.Net 垃圾回收和大对象处理 内存碎片整理
查看>>
HiKey连接
查看>>
wget 参数大全
查看>>
使用Loadrunner进行文件的上传和下载
查看>>
Linux C 静态库(.a) 与 动态库(.so) 的详解
查看>>
vim快速入门
查看>>
Dundas 系列
查看>>
Windows的命令行查看,修改,删除,添加环境变量
查看>>
iOS 图文混排
查看>>
三叉神经痛与芎胡六虫汤
查看>>
爪哇国新游记之十二----线程创建的两种形式
查看>>
64. Minimum Path Sum
查看>>
Windows Live Writer 使用指南
查看>>
分析iOS Crash文件,使用命令符号化iOS Crash文件
查看>>
mesos
查看>>
Java动态代理学习【Spring AOP基础之一】
查看>>
Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)...
查看>>
R学习笔记 第五篇:字符串操作
查看>>