美文网首页
分布式锁

分布式锁

作者: Silvergx | 来源:发表于2018-07-02 17:23 被阅读0次

    几种实现方式


    1. 基于数据库实现分布式锁
    2. 基于缓存(Redis,memcached,tair)实现分布式锁
    3. 基于Zookeeper实现分布式锁

    分布式锁实现要求:

    • 一种方法在同一时间只能被一个线程调用
    • 可重入性(线程可以进入已经获取自身已获得锁同步的代码块)
    • 获取锁和释放锁的性能要好
    基于数据库实现分布式锁
    基于数据库乐观锁(版本号)

    即基于版本号,在查询资源信息的时候带出版本号(select阶段),更新的时候版本号加1(update阶段),更新的时候对版本号进行校验,如果与查询时一致,则更新成功;如果不同,则更新失败;
    存在的问题:基于版本号的解决方案不支持对多张表的操作

    基于数据库悲观锁(排他锁)
    1. sql方式:

    public boolean lock(){
    connection.setAutoCommit(false)
      while(true){
        try{
          result = select * from methodLock where method_name=xxx for update;
          if(result==null){
            return true;
          }
        }catch(Exception e){
        }
    sleep(1000);
    }
    return false;
    }

    获得排他锁的线程即获得锁,如果获取失败则一直阻塞。
    释放锁:

    public void unlock(){
    connection.commit();
    }

    1. 事务:
      将所有数据库操作放在一个事务里,二段式、三段式提交

    转自:分布式锁的几种实现方式
               Java并发编程——锁与可重入锁;
               分布式锁方式(一、基于数据库的分布式锁)

    相关文章

      网友评论

          本文标题:分布式锁

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