乐观锁和悲观锁
乐观 悲观
2023-06-13 09:14:04 时间
乐观锁和悲观锁
Q 为什么需要锁(并发控制)
A 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,会产生冲突,这就是著名的并发问题
典型的冲突:
-- 丢失更新:一个事务的更新覆盖了其它事务的更新结果,这就是所谓的更新丢失。例如:用户A把值从6改成2,用户B把值从2改为6,则用户A丢失了他的更新。
-- 脏读:当一个事务读取其它完成一半食物的记录时,就会发生脏读。例如:用户A、B看到的值都是6,用户B把值改成了2,用户A读到的值仍为6。
为了解决这些并发带来的问题,需要引入并发控制机制
并发控制机制
-- 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
-- 乐观锁:假设不会发生并发冲突问题,只是提交操作时检查是否违反数据完整性。乐观锁不能解决脏读的问题。
乐观锁介绍:
-- 在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测
实现
-- 使用数据版本记录机制。一般是通过为数据表增加一个数字类型的version字段来实现。读取数据时,将version字段读出,数据每次更新version都加一。当我们提交更新时,判断更新时的version值和第一次取出来的值是否相等,等则可以更新,反之不可以更新。
-- 和第一个相近,同样是增加一个字段,字段名随意,字段值使用的是时间戳,判断更新时的时间戳值和第一次取出来的值是否相等,等则可以更新,反之不可以更新。
悲观锁
-- 需要使用数据库的锁机制,根据锁的作为范围不同,可以划分为:页面锁(表级锁)、行级锁、。如MySQL中,不同的数据引擎使用的锁是不同的,例如InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
相关文章
- 乐观锁和悲观锁
- 并发控制--悲观锁和乐观锁详解
- mysql的乐观锁使用_mysql悲观锁需要注意什么
- 深入浅出乐观锁、悲观锁
- 【Java 并发编程】线程锁机制 ( 悲观锁 | 乐观锁 | CAS 三大问题 | ABA 问题 | 循环时间长问题 | 多个共享变量原子性问题 )
- Redis 缓存淘汰策略和事务实现乐观锁详情
- 乐观锁 与 悲观锁 来解决数据库并发问题详解数据库
- 乐观锁的一种实现方式—CAS详解架构师
- MySQL 乐观锁与悲观锁详解编程语言
- 郑州一小哥雨中弹吉他上热搜:其乐观精神感动网友
- 秒杀天下:Redis乐观锁护航(redis乐观锁秒杀)
- Oracle 乐观锁:高效实现数据库并发控制(oracle乐观锁)
- MySQL乐观锁实现:更高效地保证数据一致性(mysql乐观锁实现)
- 乐观锁实现基于MSSQL的库存管理(库存乐观锁 mssql)
- Oracle数据库实战乐观锁与悲观锁(oracle乐观锁和悲观锁)