当前位置: 首页 > article >正文

redisson异步解锁

前置

redis trylock锁默认会有看门狗机制,如果不传占有时间,默认会占有30s(应该是),每隔一段时间就会判断业务代码是否执行完,没有就会自动续锁,如果执行完了就会解锁。
如果传入了占有时间,看门狗机制就会失效,固定时间自动解锁或者手动解锁

锁实例

    public Boolean pushHospital() {
        logger.info("[pushHospital] 推送医院信息");
        RLock lock = redissonClient.getLock(ServiceConstants.OLD_PUSH_HOS_ALL_LOCK_KEY);
        try {
            boolean b = lock.tryLock(0, time, TimeUnit.SECONDS);
            if(!b){
                throw new HospitalException(HttpStatus.INTERNAL_SERVER_ERROR.value(),"3分钟内请不要重复操作");
            }
            // 获取当前线程的id
            long id = Thread.currentThread().getId();
            
            //异步编排
           CompletableFuture.supplyAsync(this::execPushHospital,taskExecutor)
           // 正常结束或者异常结束都会执行
           .whenComplete((res, e) -> {
                logger.info("[pushHospital] 推送医院信息异步完成 res: {}, e:{}",res, e == null ? null : e.getMessage());
                //判断是否锁定,以及是否是指定线程的锁
                if(lock.isLocked() && lock.isHeldByThread(id)){
                	// 异步解锁--指定线程id
                    lock.unlockAsync(id);
                }
            });
        }catch (Exception e){
            logger.info("[pushHospital] 推送医院信息: {}", e.getMessage());
            throw new HospitalException(HttpStatus.INTERNAL_SERVER_ERROR.value(),e.getMessage());
        }
        return Boolean.TRUE;
    }

http://www.kler.cn/a/287745.html

相关文章:

  • WEB服务器实现(药品商超)
  • Java:从诞生到未来的编程语言进化史与应用前景
  • 基础IO2
  • 使用 TensorFlow 实现 ZFNet 进行 MNIST 图像分类
  • WebSocket简易聊天室实现(有详细解释)
  • PCHMI串口接收实验
  • Tower for Mac Git客户端管理软件
  • 450. 删除二叉搜索树中的节点
  • 跟李沐学AI:序列模型
  • STM32单片机和ARM有什么区别?
  • vue之函数式组件
  • git diff命令详解
  • golang私有仓库遇到的问题记录
  • 【python因果推断库1】协方差分析(ANCOVA)用于处理前/后非等效组设计
  • 对称密码学
  • ncnn之resnet图像分类网络模型部署
  • 千千蓝鲸 回文数求和(高精度运算)
  • ADAS汽车芯片LPDDR4 SIPI联合仿真案列
  • GLM大模型 - CogVideoX:5B 开源,2B 转为 Apache 协议
  • 红帽认证初级有用吗?对个人帮助,报名时间分享
  • 如何为零售行业构建有效的勒索病毒防御体系
  • git branch 不显示分支名称
  • 速盾:便宜的高防 CDN 推荐,高防 CDN 能抵御 DDoS 吗?
  • es相关概念、索引操作(相当于mysql中的数据库操作)
  • Altium designer设计经验谈——常用规则的使用(二)
  • Mysql基础练习题 610.判断三角形 (力扣)