乐观锁与悲观锁。
乐观锁与悲观锁。
提示
题眼: 无锁并发。
悲观锁:
悲观锁是一种比较保守的锁机制,它认为在整个事务过程中,数据很有可能会被其他事务修改,因此在对数据进行操作时,必须先对其进行加锁,以防止其他事务的干扰。悲观锁通常使用数据库的锁机制实现,如行锁、表锁等,可以有效地控制并发访问,但会对系统性能产生影响。
乐观锁:
乐观锁是一种比较乐观的锁机制,它认为在整个事务过程中,数据很少会被其他事务修改,因此在对数据进行操作时,并不对其进行加锁,而是在事务提交之前检查数据是否被其他事务修改过,如果被修改过,则回滚事务,重新进行操作。乐观锁通常使用版本号或时间戳等机制实现,可以减少锁的使用,提高系统性能,但需要增加一些额外的开销来实现数据版本控制。
重要
参考答案:
乐观锁和悲观锁其实是一种业务上的锁。悲观锁的话,他认为数据一定会被修改,所以上去直接对数据加锁,等到操作完成了在解锁。但乐观锁不是,乐观锁的话,他觉得数据大概不会更新,我可以直接操作,如果数据真的被更新了,那我再试一下就行。在MySQL里悲观锁实现起来很简单,可以在事务启动的时候,在select 的时候,直接加上 for update,这样子MySQL会直接给查到的数据加上一个锁,这样子就实现了悲观锁。乐观锁的话,实现起来比较麻烦。需要在表里加一个字段,比如叫version,也就是版本。每次操作数据的时候,都把版本号加1,比如我第一次查数据的时候,版本号是1,当我操作完数据后,更新数据库,如果版本号还是1,那说明这个期间没人操作过,我可以放心写入。并且把版本号加1,但是如果版本号不是1,变了,就说明这期间有人已经操作过数据了,那么这个时候就不能直接写入,需要读取新的数据进行操作了。
