本文介绍: java里面的锁机制针对的是同一个jvm进程进行共享资源共享加锁,但在分布式系统中,一般一个服务都会部署多个节点,这种情况下就需要有单独的中间件来承担多节点间加锁责任

一、分布式

java里面的锁机制针对的是同一个jvm进程进行共享资源共享加锁,但在分布式系统中,一般一个服务都会部署多个节点,这种情况下就需要有单独的中间件来承担多节点间加锁的责任

二、使用案例

		// 1. 获取对象
        RLock lock = redisson.getLock("orderPay:" + orderSN);
        try {
        	// 2. 尝试加锁,没有就直接返回
            boolean b = lock.tryLock();
            if (!b) {
                return ResponseEntity.status(500).body("正在执行,请勿频繁操作");
            }
            return ResponseEntity.ok("hello");
        } catch (Exception e) {
            return ResponseEntity.status(500).body("分布式获取失败");
        } finally {
            /**
             * 主线执行完毕后必须手动释放,因为不释放会一直被续期
             */
            if (lock.isHeldByCurrentThread()) {
            // 3. 解锁
                lock.unlock();
            }
        }

三、redisson分布式锁的几个注意点

  1. 自动续期;
    redisson分布式锁的自动续期是基于watchdog看门狗模式”,对于加锁时没有指定leaseTime(或者leaseTime设置为-1)的锁,redisson会设置一个默认过期时间30s,加锁成功后,会基于netty时间创建一个时间任务进行锁的续期。这个时间轮按1/3 * 30 每10秒一次进行续期。
  2. 手动解锁
    必须在业务主线程中finally方法进行显示调用解锁方法unlock(),如果不调用的话,续期线程会一直进行续期,不会自动停止。

四、加锁续期原理图

在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_38193228/article/details/134734994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_29456.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注