乐观锁
标准概念
乐观锁是一种在数据修改时持有乐观态度的并发控制方法。它假设多用户并发的事务在处理时不会彼此干扰,不会直接产生冲突,因此它不会直接对数据库加锁,而是在数据提交更新时,才会正式对数据的冲突与否进行检测。如果发现冲突(例如,版本号或时间戳不一致),则回滚当前事务,用户需要重新获取数据再尝试更新。
通俗示例
假设有一个共享的文件柜,里面放着一些文件。乐观锁的做法是,每个人都可以随时打开柜子取文件看,但当你想要修改并放回文件时,你会检查文件上是否有其他人的修改标记(比如版本号或时间戳)。如果没有,你就可以放心地修改并放回;但如果有,你就知道文件在你阅读期间被其他人修改过了,此时你的修改就无法直接保存,你需要重新读取文件后再尝试修改。
悲观锁
标准概念
悲观锁是在数据处理过程中,对数据持悲观态度的并发控制方法。它总是假设最坏的情况,即认为多用户并发的事务在处理数据时一定会彼此干扰,产生冲突,因此它会直接对数据加上锁,其他用户必须等待锁被释放后才能继续操作。
通俗示例:
同样以文件柜为例,悲观锁的做法是,当你想要查看或修改文件时,你需要先给文件柜上一把锁,以确保在你查看或修改文件期间,其他人不能打开柜子。这样虽然保证了你的操作不会被其他人干扰,但也使得其他人在你操作期间无法访问文件柜。当你完成操作并释放锁后,其他人才可以继续访问文件柜。
总结
- 乐观锁:认为冲突不太可能发生,因此它允许用户自由读取数据,只在更新数据时检查冲突。这种策略适用于读多写少的场景。
- 悲观锁:认为冲突很可能发生,因此它会在数据被读取时立即加上锁,以防止其他用户访问。这种策略适用于写操作频繁的场景。
在实际应用中,我们需要根据具体的应用场景和需求来选择合适的锁策略。