zoukankan      html  css  js  c++  java
  • 分布式事务锁的实现

    分布式事务锁

    *分布式事务锁目前有三种常见的实现方式,基于数据库的,基于缓存的,基于zookeeper的文件系统

    数据库实现

    悲观锁

    ​ 当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观并发控制;

    ​ 悲观锁的实现,最简单的方式可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了。这里可以利用select … where … for update 排他锁来实现悲观锁;排他锁需要注意的点是,name字段必须加索引,让查询走索引,否则会锁表;

    乐观锁

    ​ 乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。

    ​ 乐观锁的实现,也需要创建一张锁表,不过需要增加一个版本号字段;锁的实现就是加锁时查询版本号,然后进行业务操作,之后再用之前的版本号作为条件,进行update版本号,如果update成功,说明当前事务没有冲突;如果版本号不一致,则会更新失败。乐观锁适合并发量不高,并且写操作不频繁的场景;


  • 相关阅读:
    webdav srs相关
    How To Configure WebDAV Access with Apache on Ubuntu 14.04
    ubuntu 编译lighttpd
    srs编译及推流测试
    Compile pciutils (lspci, setpci) in Windows x86,在 Windows x86 平台下编译 pciutils (lspci, setpci)
    mingw MSYS2 区别
    Qt之美(三):隐式共享
    Qt之美(二):元对象
    Qt之美(一):d指针/p指针详解
    C++的栈空间和堆空间
  • 原文地址:https://www.cnblogs.com/yanghanwen/p/15054178.html
Copyright © 2011-2022 走看看