并发读写中的乐观锁、悲观锁

问题:

一份u点被多次使用,原因是同时间对一个记录执行多个更新操作,会产生冲突。这就是并发控制问题。一般有2种后果:1. 丢失更新,2. 读取到旧数据。

有2种方式解决这个问题:

一、乐观锁

乐观锁允许多个用户访问同一个数据进行修改,假定发生数据冲突的可能性最小。它会在保存时判断这个数据是否已经被修改了,如果是则失败。
Rails中,如果一个modellock_version字段,每次修改都会增加这个字段。如果一个记录的相同版本被修改了1次以上,那么第一次以后的修改会抛出StaleObjectError异常。

二、悲观锁

悲观锁认为每次读取数据时,都会有其他进程在修改数据。所以每次读取数据时都会上锁,这样其他进程就被阻塞住,直到拿到锁。
Rails中,使用ActiveRecord::Locking::Pessimistic#with_lock方法,来锁定某一行数据。

参考:

  1. https://ruby-china.org/topics/28963
  2. http://www.10tiao.com/html/591/201610/2247483863/1.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容