美文网首页
并发读写中的乐观锁、悲观锁

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

作者: hjiangwen | 来源:发表于2017-12-17 19:41 被阅读48次

    问题:

    一份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

    相关文章

      网友评论

          本文标题:并发读写中的乐观锁、悲观锁

          本文链接:https://www.haomeiwen.com/subject/hhqewxtx.html