使用乐观锁在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。一般的实现乐观锁的方式就是记录数据版本。
这是我们前面的文章中提到的一句话,但是,如果你认为乐观锁的这个过程中完全没有任何锁的参与的话那就大错特错了。
因为虽然在使用乐观锁的时候,我们没有显式的加锁,也没有用到对他的相关锁机制。但是乐观锁是使用updata语句过程中实现的,update的过程是有锁的。数据库在更新时,会根据where条件对索引添加行级锁(可能还有gap 或者 next key)
所以,乐观锁的过程中,并不是完全无锁的。
那么,乐观锁既然也有锁,那么他相比悲观锁意义在哪里呢?
乐观锁最大的好处就是通过CAS的方式做并发校验,这个过程不需要提前加锁,只需要在更新的那一刻加一个短暂的锁而已,而悲观锁的话,需要你先select for update,锁的时长要长得多。