ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【数据库】乐观锁、悲观锁通俗讲解,具体举例实现,必须懂! [打印本页]

作者: 勿忘初心做自己    时间: 2024-8-26 09:26
标题: 【数据库】乐观锁、悲观锁通俗讲解,具体举例实现,必须懂!
悲观锁和乐观锁是两种处理并发访问的不同策略,它们关注的是在多个线程同时访问共享资源时如何保证数据一致性的问题。
1、悲观锁:


2、乐观锁:


乐观锁适用于冲突较少的情况,因为它淘汰了锁的开销,但在高冲突情况中可能导致大量的重试和失败。
   悲观锁: 就比如一个人在使用自动取款机(ATM)时,先取号列队,然后在本身的操作过程中,不让其他人插队或者干扰,确保本身独享ATM资源。
    乐观锁:
就比如一个人在自动取款机前,直接去尝试取款,但在取款的时间,会检查本身的操作是否被其他人打搅,如果没有被打搅,就顺遂完成取款;如果有冲突,就须要重新尝试或者采取其他步调。
  总的来说,悲观锁更加悲观地以为会有冲突,因此提前加锁以保护资源;而乐观锁更加乐观地以为冲突不会常常发生,因此先尝试操作,再在须要的时间进行冲突检测和处理。选择乐观锁还是悲观锁,取决于应用的具体需求、数据访问模式和性能考虑。乐观锁在读多写少的场景中表现较好,而悲观锁在写操作频繁的场景中更能保证数据的一致性。在现实应用中,这两种锁常常根据具体情况和业务需求机动使用。
3、实现

为了更好地明白乐观锁和悲观锁的具体实现,我们可以使用一个简单的银行账户余额更新作为例子。我们假设有一个名为 accounts 的表,此中包罗字段 account_id(账户标识)、balance(账户余额)和 version(版本号,用于乐观锁)。
3.1. 乐观锁实现

在使用乐观锁时,我们通常在表中添加一个 version 字段。每次读取纪录时,version 字段也会被读取,并在后续的更新中检查这个版本号是否改变。

3.2. 悲观锁实现

在使用悲观锁时,可以使用数据库提供的锁机制(如行锁),确保在当前变乱完成之前,其他变乱不能修改被锁定的数据。

乐观锁和悲观锁各有用武之地,具体使用哪种锁机制取决于应用场景和并发级别。乐观锁适用于写操作较少的场景,悲观锁则适用于高冲突情况,尤其是在多用户频繁写入同一数据的场合。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4