深入理解乐观锁与悲观锁-编程开发技术

深入理解乐观锁与悲观锁-编程开发技术

ID:31003543

大小:69.00 KB

页数:4页

时间:2019-01-05

深入理解乐观锁与悲观锁-编程开发技术_第1页
深入理解乐观锁与悲观锁-编程开发技术_第2页
深入理解乐观锁与悲观锁-编程开发技术_第3页
深入理解乐观锁与悲观锁-编程开发技术_第4页
资源描述:

《深入理解乐观锁与悲观锁-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、深入理解乐观锁与悲观锁-编程开发技术深入理解乐观锁与悲观锁原文出处:HollisChuang在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要釆用的技术手段。无论是悲观锁还是乐观锁,都是人们定义岀來的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcachc.hibernate、tair等都冇类似的概念。针对于不同

2、的业务场景,应该选用不同的并发控制方式。所以,不要把乐观并发控制和悲观并发控制狭义的理解为DBMS小的概念,更不要把他们和数据小提供的锁机制(行锁、表锁、排他锁、共享锁)混为一谈。其实,在DBMS中,悲观锁止是利用数据库本身提供的锁机制來实现的。下面来分别学习一下悲观锁和乐观锁。悲观锁在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,PessimisticConcurrencyControl,缩写"PCC”)是一种并发控制的方法。它可以阻止一个事务以彩响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用

3、了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。悲观锁,正如其名,它指的是对数据被外界(包插本系统当前的其他事务,以及來口外部系统的事务处理)修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统屮实现了加锁机制,也无法保证外部系统不会修改数据)在数据库中,悲观

4、锁的流程如下:在对任意记录进行修改帀j,先尝试为该记录加上排他锁(exclusivelocking)o如果加锁失败,说明该记录止在被修改,那么当前杳询可能要等待或者抛岀异常。具体响应方式由开发者根据实际需要决定。如果成功加锁,那么就可以对记录做修改,事务完成后就会解锁了。其间如杲有其他对该记录做修改或加排他锁的操作,都会等待我们解锁或直接抛岀异常。MySQLInnoDB中使用悲观锁要使用悲观锁,我们必须关闭mysql数据库的自动提交属性,因为MySQL默认使用autocommit模式,也就是说,当你执彳亍一个更新操作后

5、,MySQL会立刻将结果进行捉交。setautocommit=0;//0.开始事务begin;/beginwork;/starttransaction;(三者选一就可以)//I•查询出商品信息selectstatusfromt_goodswhereid=lforupdate;//2.根据商品信息生成祁单insertintotorders(id,goodsid)values(null,1);//3•修改商品status为2updatet_goodssetstatus二2;//4.提交予务commit;/commitwor

6、k;上面的查询语句中,我们使用了select…forupdate的方式,这样就通过开启排他锁的方式实现了悲观锁。此吋在t.goods中,id为1的那条数据就被我们锁定了,其它的事务必须等本次事务挺交之后才能执行。这样我们叮以保证当前的数据不会被其它事务修改。上而我们捉到,使用select・・・forupdate会把数据给锁住,不过我们需要注意一些锁的级别,MySQLInnoDB默认行级锁。行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住,这点需要注意。优点与不足悲观并发控制

7、实际上是“先取锁再访问”的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会;另外,在只读型事务处理中由于不会产生冲突,也没必要使用锁,这样做只能增加系统负载;述冇会降低了并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数乐观锁在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,OptimisticConcurrencyControl,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,

8、各事务能够在不产牛锁的情况下处理各口影响的那部分数据0在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(II.T.Kung)教授提出。怎观锁(OptimisticLocking)相对悲观锁而言,乐观锁假设认为数据一般情

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。