首页 > 数据库 >72、缓存---分布式锁---Redisson的Lock锁测试

72、缓存---分布式锁---Redisson的Lock锁测试

时间:2023-02-01 19:24:46浏览次数:50  
标签:Redisson 过期 Lock 30s --- 加锁 时间 lock 续期

    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        //1、获取一把锁,只要是锁的名字一样,就是同一把锁
        RLock lock = redissonClient.getLock("my-lock");

        //2、加锁
        lock.lock();//阻塞式等待
        try {
            System.out.println("加锁成功,执行业务。。。" + Thread.currentThread().getId());
            Thread.sleep(30000);//睡眠,模拟超长业务
        }catch (Exception e){

        }finally {
            //3、解锁
            System.out.println("释放锁。。。" + Thread.currentThread().getId());
            lock.unlock();
        }

        return "hello";
    }

假如多个线程一块执行hello请求,一个线程抢占到锁后,在释放锁之前突然宕机,释放锁失败。这样别的线程还能请求到锁吗?
答案是可以的!
因为redisson有一个看门狗机制。
redisson加的锁都是阻塞式等待,默认加锁都是30s时间
1、锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s。不用担心业务时间长,锁自动过期被删除
2、加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后自动删除。

也可以自己指定锁的过期时间: lock.lock(10, TimeUnit.SECONDS);//阻塞式等待
但是要注意,我们指定过期时间这个方法,不会像上面那样会自动续期,所以我们在多线程情况下必须设置的锁的过期时间要大于我们业务的执行时间才可以
原理:

1、如果我们传递了锁的超时时间,就发送给redis执行脚本,进行占锁,默认超时就是我们指定的时间
2、如果我们未传递了锁的超时时间,就使用30*1000【默认看门狗的时间】,只要占锁成功,就会启动一个定时任务,【重新给锁设置过期时间,新的过期时间就是看门狗的默认事件】,每隔10s都会自动续期。

但是我们在实战中还是使用自己指定过期时间的方法,因为这样不用自动续期,提高效率。只要我们指定过期时间大于业务时间即可。比如30s

标签:Redisson,过期,Lock,30s,---,加锁,时间,lock,续期
From: https://www.cnblogs.com/morehair/p/17083910.html

相关文章

  • Redis的雪崩,击穿,穿透详解-转载
    在今天的互联网里,高并发、大数据量、大流量已经成为了代言词,那么我们的系统也承受着巨大的压力,首当其冲的解决方案就是redis。那么redis使用不当就会产生雪崩、穿透、击穿......
  • 心理学-推荐嘉宾-赵了了
    【心理学嘉宾-赵了了-抖音主页】https://www.douyin.com/user/MS4wLjABAAAAx8SHCZdfKJP3jMdjL4GxkU4WFoS1QJ1UyEeS_YrWF3SUtflX5yDN1ogLdnI1iIWm?modal_id=71461628956325......
  • 增加uuid中“-”问题
    问题:django在将uuid存入数据库时候会将“-”删除,如:“2ac99acd-c8da-4a86-a6f4-f7086d554dde”->“2ac99acdc8da4a86a6f4f7086d554dde”解决办法:importuuidclient_......
  • 漏洞免费实战部分-安卓应用漏洞学习case6
    安卓应用漏洞学习case6前期回顾漏洞免费实战部分-安卓应用层getLastPathSegment函数问题漏洞实战部分2-安卓应用ZipEntry对象问题实战漏洞实战部分3-ContentProvider......
  • 【ES HTTP-高级查询 02】
    一、高级查询Elasticsearch提供了基于JSON完整的DSL来定义查询#构造数据-供后续各种复杂的查询做准备#POST/student/_doc/1001{"name":"zhangsan","nic......
  • 《istio-in-action 系列》 1. 安装 docker-k3s-istio 开发环境
    《istio-in-action系列》1.安装docker-k3s-istio开发环境1.安装docker我这里使用的是​​ubuntu20.04LTS​​操作系统sudoaptupdatesudoaptinstalldocker.io......
  • go学习笔记-
    http.HandleFunc("/",func(whttp.ResponseWriter,r*http.Request){http.ServeFile(w,r,"index.html")})HandleFunc注册一个处理器函数handler和对应的模式p......
  • 超大文件上传-如何上传文件-大文件上传
    ​ 文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦、缺乏交互、用户体验差。一、前端代码英国程序员RemySharp总结了这些新的接口 ,本文在他......
  • vulnhub_matrix-breakout-2-morpheus
    前言靶机地址:matrix-breakout-2-morpheus攻击机:kali2022.3靶机:matrix-breakout-2-morpheus题目描述:这是《黑客帝国突围》系列的第二部,副标题为墨菲斯:1。它的主题是对......
  • Pytorch_YOLO-v8-模型训练
    datasetYOLO会自动将…/datasets/dataset_new/images/train/1.jpg中的/images/替换成/labels/以寻找它的标签,如…/datasets/dataset_new/labels/train/1.txt0:perso......