- 乐观锁:
认为当前竞争度不高的情况使用,类似于java中的cas操作,一般是在表的字段中设置版本号,代码中先获取记录及对应的版本号,然后执行逻辑操作,最后循环进行,update … version=version_+1 and… where version=verson_ …直到成功。 - 悲观锁:
认为当前竞争度高的情况使用,一般是,一锁二查(2.5 逻辑操作)三更新。可以用select… for update实现。
并发度高的情况下用乐观锁会频繁更新失败得不偿失,并发读低的情况下用乐观锁只在update时上锁,一来可以提高并发性能,二来锁的重量级应该较轻。