企业门户网站建设新闻,浙江信息港查询三类证书,门户网站管理系统,封面设计网站有哪些在并发控制编程中锁是一个非常重要的概念#xff0c;锁对于数据和业务一致性的保证起到关键作用#xff0c;锁可以是程序层面的#xff0c;也可以是数据库层面的#xff0c;今天本文就通过MySQL来说明悲观锁与乐观锁两种常见的锁机制。悲观锁悲观锁(Pessimistic Lock)的特点…在并发控制编程中锁是一个非常重要的概念锁对于数据和业务一致性的保证起到关键作用锁可以是程序层面的也可以是数据库层面的今天本文就通过MySQL来说明悲观锁与乐观锁两种常见的锁机制。悲观锁悲观锁(Pessimistic Lock)的特点是先获取锁在进行数据操作最后释放锁。即先锁后查再更新,使用悲观锁的“悲观”的认为是这种获取锁的的可能是非常小的因而需要确保获取到锁后再进行操作。这种操作在MySQL中的典型例子就是“select * from goods where id5 for update”。但是在这种操作下需要考虑以下情况。使用for update“”的时候要注意此语句必须要放到事务中执行等待事务提交或者回滚后才会释放锁锁住的行才能允许被其他事务访问。在for update的时候被扫描的行都会被锁住所以需要尽可能的保证扫描的行少一般都是锁在索引列上面否则最坏的情况可能导致全表被锁影响其他业务。乐观锁乐观锁(Optimistic Lock)的特点先进行业务操作不到万不得已不去拿锁。即“乐观”的认为拿锁多半是会成功的因此在进行完业务操作需要实际更新数据的最后一步再去拿一下锁就好。通过上述例子可以看到乐观锁在原有数据没有改变的基础上(版本号没有发生改变)操作成功改变了回滚进行重试或者其他操作。乐观锁一般需要通过正确的去维护一个版本号字段来进行并发控制。总结在取锁的失败率比较低的情况下乐观锁的开销是较小了反而取锁失败过高导致事务回滚的开销就比较大。悲观锁在取锁概率较小和业务不是非常复杂的系统中用的还是比较普遍。好啦今天的内容就分享到这里喜欢的话来个转发关注吧