分布式锁


可靠的分布式锁,应该具备的几个特征

互斥性 在任意时刻,只有一个客户端能持有锁
不会发生死锁 即使有有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁
具有容错性 只有大部分的redis节点正常,客户端就可以加锁和解锁
解铃还须系铃人 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解锁
锁不能自己失效 正常执行程序过程中,锁不能因为某些原因失效

项目中用到的redissson框架防重复提交:

   RedissonClient redissonClient = RedissonConfig.redissonClient();
        RLock rLock = redissonClient.getLock(accountBookId);
        try {
            if (rLock.isLocked()) {
               createException("当前***正在处理中,请等待");
            }
            rLock.lock();
            doMethod();
        }finally {
            if (rLock.isLocked()) {
                if (rLock.isHeldByCurrentThread()) {
                    rLock.unlock();
                }
            }
        }