悲观锁
悲观锁(Pessimistic Locking)的基本思想是假设并发操作之间会发生冲突,因此会对数据进行加锁,阻塞其他操作。
在数据更新时,悲观锁会先获取锁,然后执行更新操作,其他操作需要等待锁的释放才能继续执行。
悲观锁优点
悲观锁的优点是可以保证数据的一致性,因为在更新操作期间其他操作无法修改数据。
悲观锁缺点
(1)性能问题
悲观锁会阻塞其他操作,会降低系统的并发性能。如果操作过程中需要等待锁的释放,会增加操作的响应时间,影响用户体验。
(2)死锁问题
悲观锁可能会出现死锁问题,即多个线程相互等待对方释放锁导致无法继续执行。
(3)锁粒度问题
悲观锁的锁粒度较大,可能会导致部分数据无法并发操作,影响系统的并发性能。
(4)编程复杂度高
在使用悲观锁时,需要进行锁的加锁和释放操作,需要处理锁的粒度、超时等问题,编程复杂度较高。
悲观锁使用场景
(1)并发量高
悲观锁适合在并发量较高的场景下使用,因为它可以保证数据的一致性。
(2)多写少读
悲观锁适合在多写少读的场景下使用,因为读操作需要等待写操作释放锁才能进行。
(3)数据冲突概率高
悲观锁适合在数据冲突概率较高的场景下使用,即并发操作之间很可能发生冲突。
(4)悲观锁的实现机制
悲观锁通常是通过数据库行级锁或者分布式锁来实现的。在更新数据时,会对数据进行加锁,其他操作需要等待锁的释放才能继续执行。
悲观锁实现方式
(1)数据库行级锁
数据库提供了行级锁的机制,可以在事务中对数据行进行加锁。
通过在事务中使用SELECT ... FOR UPDATE语句,可以获取对数据行的悲观锁,其他事务需要等待锁的释放才能进行操作。
(2)分布式锁
在分布式系统中,可以使用分布式锁来实现悲观锁。
分布式锁的实现方式有很多种,如基于数据库、基于缓存、基于ZooKeeper等。通过获取分布式锁,可以保证在分布式环境下对数据的悲观锁定。
(3)悲观读取
在读取数据时,直接使用悲观锁来锁定数据,其他操作需要等待锁的释放才能进行。这种方式适用于多写少读的场景,以保证数据的一致性。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。