Lock4j:一个强大的分布式锁框架!

RuoyiCloudPlus中使用分布式锁Lock4j 分布式锁的超时时间:发生网络抖动(释放锁的一瞬断网了)以及Redis宕机。通常Ression自带的看门狗功能会自动审视过期时间内程序是否执行完。Lock4j支持Redisson,RedisTemplate,zookeeper。acquire-timeout:获取分布式锁超时时间,默认为 3000 毫秒。expire: 分布式锁的超时时间,默认为 30 秒。获取锁超时:比如发生死锁时,防止其他线程长时间等待。 阅读详情
AI摘要

Lock4j是一个分布式锁组件,基于Spring AOP,提供声明式和编程式分布式锁,支持RedisTemplate、Redisson、Zookeeper。它简单易用、功能强大、扩展性强。使用前需引入依赖和添加redis配置,还介绍了注解属性、简单使用及高级使用方法,如自定义执行器等。

一、简介

Lock4j是一个分布式锁组件,它提供了多种不同的支持以满足不同性能和环境的需求,基于Spring AOP的声明式和编程式分布式锁,支持RedisTemplate、Redisson、Zookeeper。

二、特性

  • 简单易用,功能强大,扩展性强。

  • 支持redission, redisTemplate, zookeeper,可混用,支持扩展。

开源地址:

https://gitee.com/baomidou/lock4j

三、使用前准备

3.1 引入依赖

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>lock4j-redis-template-spring-boot-starter</artifactId>
<version>2.2.4</version>
</dependency>

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>lock4j-redisson-spring-boot-starter</artifactId>
<version>2.2.4</version>
</dependency>

3.2 添加redis配置

spring:
  redis:
database:0
# Redis服务器地址 写你的ip
host:127.0.0.1
# Redis服务器连接端口
port:6379
# Redis服务器连接密码(默认为空)
password:
# 连接池最大连接数(使用负值表示没有限制  类似于mysql的连接池
jedis:
pool:
max-active:200
# 连接池最大阻塞等待时间(使用负值表示没有限制) 表示连接池的链接拿完了 现在去申请需要等待的时间
max-wait:-1
# 连接池中的最大空闲连接
max-idle:10
# 连接池中的最小空闲连接
min-idle:0
# 连接超时时间(毫秒) 去链接redis服务端
timeout: 6000

四、注解属性介绍

package com.baomidou.lock.annotation;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public@interfaceLock4j{
Stringname()default"";

Class<?extendsLockExecutor> executor()defaultLockExecutor.class;

String[] keys()default{""};

longexpire()default-1L;

longacquireTimeout()default-1L;

booleanautoRelease()defaulttrue;
}

图片

五、简单使用

@RestController
@RequestMapping("/mock")
publicclassMockController{

@GetMapping("/lockMethod")
@Lock4j(keys = {"#key"}, acquireTimeout = 1000, expire = 10000)
publicResultlockMethod(@RequestParam String key){
ThreadUtil.sleep(5000);
returnResult.OK(key);
}
}

打开浏览器窗口,重复刷新访问:

http://localhost:8080/mock/lockMethod?key=123

成功获得锁访问结果:

{
    "success":true,
"message":"操作成功!",
"code":200,
"result":"123",
"timestamp":1678866083211
}

抢占不到锁,Lock4j会抛出

com.baomidou.lock.exception.LockFailureException: request failed,please retry it.

异常,通过全局异常处理返回如下结果:

{
    "success":false,
"message":"操作失败,request failed,please retry it.",
"code":500,
"result":null,
"timestamp":1678866034929
}

六、高级使用

6.1 自定义执行器Exector

/**
 * 自定义分布式锁执行器
 *
 * @author: austin
 * @since: 2023/3/15 15:45
 */
@Component
publicclassCustomRedissonLockExecutorextendsAbstractLockExecutor{

@Override
publicObjectacquire(String lockKey, String lockValue, long expire, long acquireTimeout){
returnnull;
}

@Override
publicbooleanreleaseLock(String key, String value, Object lockInstance){
returnfalse;
}
}

在注解上直接指定特定的执行器:

@Lock4j(executor = CustomRedissonLockExecutor.class)。

6.2 自定义分布式锁key生成器

/**
 * 自定义分布式锁key生成器
 *
 * @author: austin
 * @since: 2023/3/15 15:46
 */
@Component
publicclassCustomKeyBuilderextendsDefaultLockKeyBuilder{

publicCustomKeyBuilder(BeanFactory beanFactory){
super(beanFactory);
}
}

6.3 自定义抢占锁失败执行策略

/**
 * 自定义抢占锁失败执行策略
 *
 * @author: austin
 * @since: 2023/3/15 15:49
 */
@Component
publicclassGrabLockFailureStrategyimplementsLockFailureStrategy{

@Override
publicvoidonLockFailure(String key, Method method, Object[] arguments){

}
}

默认的锁获取失败策略为 

com.baomidou.lock.DefaultLockFailureStrategy.

6.4 手动加锁释放锁

@Service
publicclassLockServiceImplimplementsLockService{

@Autowired
privateLockTemplate lockTemplate;

@Override
publicvoidlock(String resourceKey){

LockInfolock= lockTemplate.lock(resourceKey,10000L,2000L,CustomRedissonLockExecutor.class);
if(lock ==null){
// 获取不到锁
thrownewFrameworkException("业务处理中,请稍后再试...");
}
// 获取锁成功,处理业务
try{
            doBusiness();
}catch(Exception e){
thrownewRuntimeException(e);
}finally{
            lockTemplate.releaseLock(lock);
}
}

privatevoiddoBusiness(){
// TODO 业务执行逻辑
}
}
lock4j 库中的 @Lock4j 注解进行全面的概述和深度的源码级剖析。 Lock4j的核心功能是声明式分布式锁。它通过 AOP 在方法执行前尝试获取锁,执行后自动释放锁,将分布式锁的通用逻辑与业务代码完全解耦。@Lock4j是一个基于 Spring AOP 和 SpEL 的强大声明式分布式锁框架。它通过注解驱动执行器插件化和Key动态化的设计,将复杂的分布式锁技术细节完全隐藏,让开发者能够专注于业务逻辑。最佳实践:锁粒度:使用key或keys属性设置细粒度锁,避免使用粗粒度的全局锁,提高并发性能。。超时设置expire时间应大于业务方法的平均执行时间,但不宜过长。 阅读详情

相关推荐

lock4j高性能分布式锁 v2.2.5.zip

lock4j高性能分布式锁 v2.2.5.zip

分布式锁Lock4J 使用总结

前提条件必须继承抽象类:com.baomidou.lock.executor.AbstractLockExecutorZooKeeper 版本执行器之ZookeeperLockExecutor////if (!} else {try {try {Redis 版本执行器之RedisTemplateLockExecutor////

zhouzhiwengang的专栏 7706

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植

本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。

ik678901234的博客 973

lock4j--分布式锁中间件--使用/实例

本文用示例介绍分布式锁中间件lock4j 的用法。

IT利刃出鞘的博客 7731

Dia 使用说明

简述 在linux上面能找到dia这个工具还是挺幸运的,因为之前画流程图总是使用ubuntu默认的word工具 在里面画图,感觉流程图使用起来麻烦,并且视觉效果真的不好看。 自从使用Dia后,感觉至少画起来流程图会变得越来越标准了。但是Dia也存在问题,就是使用的文档很少,使用中遇到为后,查起来比较费劲,但是至少问题不是很多,所以使用中遇到的几点问题我就记下来,和大家分享,加快大家的开发和文档整理能力。 我会按照遇到的问题来说,不存在使用的先后顺序。 1. Dia 去掉背景中的线条 首先去点那个大一点的蓝色

linan101的博客 4926

深入理解Cornerstone3D.js渲染Stack影像数据

这个是调用的core\src下的init.ts的init方法,作用是:初始化cornerstone-core,检测客户端是否支持WebGL,默认情况下是支持中等GPU层级.另外一个重要的是实例化WebWorkManager.WebWorkManager类似于Java的线程池,是用来对Web Worker进行管理的管理器。使用DICOMwebClient获取影像文件的元数据,然后将它们缓存到imageLoader的metaDataManager中,在上面我们可以输出元数据看一下是什么。

wangwei19820517的博客 1495

分布式锁框架Lock4j简单使用

Lock4j是一个分布式锁组件,它提供了多种不同的支持以满足不同性能和环境的需求;它基于Spring AOP,支持RedisTemplate、Redisson、Zookeeper作为底层。

专注Java后端技术干货、项目源码总结分享,期待您的关注。 4307

su03t语音模块烧录识别不出问题解决方法

su03t语音sdk烧录无法识别问题

weixin_49387645的博客 6390

Lock4J分布式锁

支持redission,redisTemplate,zookeeper。lock4j是一个分布式锁组件,其提供了多种不同的支持以满足不同性能和环境的需求。引入相关依赖(支持同时存在,不同方法不同锁实现)。立志打造一个简单但富有内涵的分布式锁组件。简单易用,功能强大,扩展性强。

qq_52136981的博客 1028

在LangChain中使用DashVector进行高效向量检索

DashVector为需要处理高维向量数据的开发者提供了一种便捷且高效的解决方案。通过将其集成到LangChain生态系统中,您可以轻松实现复杂的语义搜索和数据分析功能。DashVector官方文档LangChain GitHub仓库有关DashVector的详细notebook示例。

sjufgwgfhoia的博客 456

【重温童年】基于tkinter模块设计的Q宠大乐斗武器升星模拟器:重温经典,畅享休闲时光

与传统的Q宠大乐斗不同,这款模拟器还加入了一个创新的功能——自定义升星概率。玩家可以根据自己的喜好和策略,为不同的武器设置不同的成功率和降级率。比如,你可以将“嗜血”这把武器的升星难度设置得极高,以体现其稀有性和强大威力;也可以将“平底锅”这样的普通武器设置得相对容易升星,让玩家在升级过程中感受到更多的成就感。这种自定义的概率设置,不仅增加了游戏的趣味性和挑战性,还让玩家在升级过程中有了更多的策略和选择。你可以根据自己的武器库和卷轴数量,制定出最合适的升级计划,从而在游戏中占据先机。

nmdbbzcl的博客 1241

推荐一个分布式锁框架Lock4j

Lock4j是一个分布式锁组件,它提供了多种不同的支持以满足不同性能和环境的需求,基于Spring AOP的声明式和编程式分布式锁,支持。复制代码@Lock4j注解属性说明name需要锁住的key名称executor可以通过该参数设置自定义特定的执行器keys需要锁住的keys名称,可以是多个expire锁过期时间,主要是用来防止死锁可以理解为排队等待时长,超过这个时长就退出排队,并排除获取锁超时异常是否自动释放锁,默认是true/**

Java技术攻略的博客 3401

嵌入式AI实战:基于RK3588部署YOLOv11并集成OpenCV实现实时推理(全流程详解)

本文详细介绍了在RK3588芯片上部署YOLOv11目标检测模型的全流程,包括环境搭建、模型转换和实时推理实现。主要内容为:1)通过YOLOv11官方工具将PyTorch模型转为ONNX格式;2)使用RKNN Toolkit2将ONNX模型转换为适配RK3588的RKNN格式;3)在RK3588上结合OpenCV实现实时视频推理功能。教程提供了完整的代码示例和详细步骤说明,帮助开发者快速在边缘设备上部署目标检测模型,实现AI视觉应用的落地。

LXY_LOVE36的博客 214

一个功能强大的分布式锁框架:Lock4j

*** 自定义分布式锁执行器*/@Component@Override@Override。/*** 自定义分布式锁key生成器*/@Component/*** 自定义抢占锁失败执行策略*/@Component@Override默认的锁获取失败策略为。

Lxl1418的博客 934

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

一个强大的分布式锁框架——Lock4j

???? 欢迎加入小哈的星球,你将获得:专属的项目实战 /1v1 提问/Java 学习路线 /学习打卡/每月赠书/社群讨论新项目:《从零手撸:仿小红书(微服务架构)》正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍;《从零手撸:前后端分离博客项目(全栈开发)》2期已完结,演示链接:http...

犬小哈 334

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

布式锁框架Lock4j简单使用

Lock4j是一个分布式锁组件,它提供了多种不同的支持以满足不同性能和环境的需求;它基于Spring AOP,支持RedissonZookeeper作为底层。@Lock4j属性说明name需要锁住的key名称executorlock 执行器,可以使用该参数自定义设置keys需要锁住的keys名称,可以是多个expire锁过期时间,主要是用来防止死锁可以理解为排队等待时长,超过这个时长就退出排队,并排除获取锁超时异常是否自动释放锁,默认为true/**

wys0127的博客 2718

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

分布式锁组件lock4j常见问题解决方案

分布式锁组件lock4j常见问题解决方案 1. 项目基础介绍和主要编程语言 lock4j 是一个基于Java语言的分布式锁组件,它提供了简单易用、功能强大且高度可扩展的分布式锁解决方案。该组件支持多种不同的分布式锁实现,如基于RedisTemplate、Redisson和Zookeeper。lock4j 可以帮助开发者轻松地在分布式系统中管理和同步共享资源,防止数据冲突和保证数据的一致性。 主要编...

gitblog_01151的博客 952

强大的分布式锁框架——Lock4j

*** 自定义分布式锁执行器*/@Component@Overridereturnnull;@Override。/*** 自定义分布式锁key生成器*/@Component/*** 自定义抢占锁失败执行策略*/@Component@Override默认的锁获取失败策略为。

wjianwei666的专栏 1028

Lock4j简单的支持不同方案的高性能分布式锁实现及源码解析

lock4j是苞米豆提供的一个分布式锁组件,其提供了多种不同的支持以满足不同性能和环境的需求。立志打造一个简单但富有内涵的分布式锁组件。

qq_34905631的博客 1898

别再自己封装了,推荐一个功能强大的分布式锁框架:Lock4j

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。• 简单易用,功能强大,扩展性强。

weixin_44421461的博客 101
上一篇: MysqlWorkBench:自带数据库监控和ER图!!
下一篇: DaxPay:一套开源支付网关系统
架构文摘JGWZ
博客等级 码龄5年 8808粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值