乐观锁适用于冲突少的场景的主要原因是:在并发量不大、修改操作不频繁的情况下,冲突的概率较小,可以有效地提高系统的并发性能。而在冲突多的情况下,乐观锁的重试次数会增加,系统的开销也会随之增加,降低了系统的并发性能,因此不适用于冲突多的场景。
乐观锁是一种基于冲突检测的锁技术,它的基本思想是:每次对数据进行修改时,先获取当前数据的版本号,然后对数据进行操作,在提交数据时,比较当前数据的版本号和获取时的版本号是否一致,如果一致,则提交成功,否则说明数据已被其他线程修改,需要回滚并重新操作。
使用乐观锁时,需要在数据表中添加一个版本号字段,每次对数据进行修改时,先获取当前数据的版本号,然后对数据进行操作,在提交数据时,比较当前数据的版本号和获取时的版本号是否一致,如果一致,则提交成功,否则说明数据已被其他线程修改,需要回滚并重新操作。
乐观锁适用于冲突少的场景的主要原因是:在并发量不大、修改操作不频繁的情况下,冲突的概率较小,可以有效地提高系统的并发性能。而在冲突多的情况下,乐观锁的重试次数会增加,系统的开销也会随之增加,降低了系统的并发性能,因此不适用于冲突多的场景。
延伸阅读:
什么是乐观锁?
乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。而乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本( Version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号等于数据库表当前版本号,则予以更新,否则认为是过期数据。
文章标题:乐观锁为什么适用于冲突少的场景,以及应用在内存数据库中,发布者:Flawy,转载请注明出处:https://worktile.com/kb/p/53413