悲观锁:
开始在执行前就会认为数据可能出现竞争,直接加锁,它是依靠数据库的锁来实现,但是缺点也很明显:
如果悲观锁加锁的时间过长,其他用户就会无法访问,大大降低了程序的并发性能,因为依靠数据库的锁来实现,所以数据库的开销也会比较大。所以有了乐观锁的实现
乐观锁:
相对于悲观锁来说,乐观锁会认为数据开始不会发生竞争,只有在数据进行更新提交的时候,才会对数据进行冲突检查,如果冲突了就会返回冲突信息,那么一般是如何实现的,主要有一下两种:
1:通过版本号的方式控制
在查询的时候查询出旧的version,在更新的时候会对旧的version进行加1操作,在数据更新的时候,通过where条件进行判断,版本号是不是和预期的一致,如果不是返回错误,如果是的话直接更新。
2:通过其他字段,比如时间戳方式
以时间戳的方式,和版本号差不多,不过就是时间戳是实时获取的,更新的时候对于时间戳。
但是在乐观锁环境中可能出现用户提交不成功一致提交的过程,也会降低系统的性能