人无再少年|

陌上人如玉এ

园龄:2年5个月粉丝:41关注:0

redis实现分布式锁(redissonClient)

@Component
public class DistributedRedisLock {
    @Autowired
    private RedissonClient redissonClient;

    // 加锁
    public Boolean lock(String lockName) {
        try {
            if (redissonClient == null) {
                LoggerUtils.errorSendELKAndPrintDetailConsole(this.getClass(),new Object[]{},"redissonClient为空");
                return false;
            }
            RLock lock = redissonClient.getLock(lockName);
            // 锁60秒后自动释放,防止死锁
            lock.lock(60, TimeUnit.SECONDS);

            // 加锁成功
            return true;
        } catch (Exception e) {
            LoggerUtils.errorSendELKAndPrintDetailConsole(this.getClass(),new Object[]{},"加锁异常:" + lockName);
            e.printStackTrace();
            return false;
        }
    }

    // 释放锁
    public Boolean unlock(String lockName) {
        try {
            if (redissonClient == null) {
                LoggerUtils.errorSendELKAndPrintDetailConsole(this.getClass(),new Object[]{},"redissonClient为空");
                return false;
            }
            RLock lock = redissonClient.getLock(lockName);

            if (lock.isLocked()) {
                if (lock.isHeldByCurrentThread()) {
                    // 主动释放锁
                    lock.unlock();
                    return true;
                }
            }
            return true;
        } catch (Exception e) {
            LoggerUtils.errorSendELKAndPrintDetailConsole(this.getClass(),new Object[]{},
                    Thread.currentThread().getName() + "解锁异常:" + lockName);
            e.printStackTrace();
            return false;
        }
    }
}

本文作者:陌上人如玉এ

本文链接:https://www.cnblogs.com/wxs520/p/17967577

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   陌上人如玉এ  阅读(57)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起