redisson分布式锁

一、分布式锁

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(),如果不调用的话,续期线程会一直进行续期,不会自动停止。

四、加锁续期原理图

在这里插入图片描述

  • 这里watchlog任务线程并非是”守护线程“,不会因为业务线程的执行完毕而自动停止,所以必须在业务代码中显示的执行解锁操作lock.unlock(),一般放在finally方法中。

相关推荐

  1. Redis - 分布式Redisson

    2023-12-06 17:16:04       34 阅读
  2. SpringBoot+Redisson分布式

    2023-12-06 17:16:04       29 阅读
  3. SpringBoot+Redisson分布式

    2023-12-06 17:16:04       41 阅读
  4. Redisson分布式

    2023-12-06 17:16:04       27 阅读
  5. redisson分布式

    2023-12-06 17:16:04       20 阅读
  6. Redisson 实现分布式

    2023-12-06 17:16:04       21 阅读
  7. 分布式Redisson

    2023-12-06 17:16:04       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 17:16:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 17:16:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 17:16:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 17:16:04       18 阅读

热门阅读

  1. linux下查看硬盘哪些文件夹比较大

    2023-12-06 17:16:04       31 阅读
  2. 什么是Redis?

    2023-12-06 17:16:04       41 阅读
  3. 开发一款短剧视频小程序软件多少钱?

    2023-12-06 17:16:04       33 阅读
  4. 什么是Ros(一)- 名词解释和架构概述

    2023-12-06 17:16:04       39 阅读
  5. Ubuntu 20.4 源代码方式安装 cdo(笔记)

    2023-12-06 17:16:04       31 阅读
  6. 入门 PyTorch

    2023-12-06 17:16:04       39 阅读