Python 官方文档:入门教程 => 点击学习
目录项目简介目的快速开始需要Maven 引入入门例子整合 springmaven 引入指定 bean 使用aop 注解使用Spring Boot 整合maven 引入使用后期 Roa
lock 为 java 设计的分布式锁,开箱即用,纵享丝滑。
开源地址:https://GitHub.com/houbb/lock
jdk1.7+
maven 3.x+
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>lock-core</artifactId>
<version>1.3.0</version>
</dependency>
基于本地 redis 的测试案例。
public void helloTest() {
ILock lock = LockBs.newInstance();
String key = "DDD";
try {
// 加锁
lock.tryLock(key);
System.out.println("业务处理");
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
// 释放锁
lock.unlock(key);
}
}
配置化
为了便于拓展,LockBs 的配置支持自定义:
LockBs.newInstance()
.id(Ids.uuid32()) //id 生成策略
.cache(JedisRedisServiceFactory.pooled("127.0.0.1", 6379)) //缓存策略
.lockSupport(new RedisLockSupport()) // 锁实现策略
.lockKeyFORMat(new LockKeyFormat()) // 针对 key 的格式化处理策略
.lockReleaseFailHandler(new LockReleaseFailHandler()) //释放锁失败处理
;
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>lock-spring</artifactId>
<version>1.3.0</version>
</dependency>
启用分布式锁
@EnableLock
启用分布式锁。
@EnableRedisConfig
启用 redis 的默认配置。
@Configurable
@ComponentScan(basePackages = "com.github.houbb.lock.test.service")
@EnableLock
@EnableRedisConfig
public class SprinGConfig {
}
EnableLock
注解说明,和引导类对应:
public @interface EnableLock {
String id() default "lockId";
String cache() default "springRedisService";
String lockKeyFormat() default "lockKeyFormat";
String lockReleaseFailHandler() default "lockReleaseFailHandler";
}
其中 springRedisService
使用的是 redis-config 中的实现。
对应注解 @EnableRedisConfig
,redis 的配置信息如下:
配置 | 说明 | 默认值 |
---|---|---|
redis.address | redis 地址 | 127.0.0.1 |
redis.port | redis 端口 | 6379 |
redis.passWord | redis 密码 |
使用 LockBs
我们可以直接 LockBs
的引导类,这种适合一些更加灵活的场景。
@ContextConfiguration(classes = SpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringServiceRawTest {
@Autowired
private UserService userService;
@Autowired
private LockBs lockBs;
@Test
public void queryLogTest() {
final String key = "name";
try {
lockBs.tryLock(key);
final String value = userService.rawUserName(1L);
} catch (Exception exception) {
throw new RuntimeException(exception);
} finally {
lockBs.unlock(key);
}
}
}
指定方法注解
当然,我们可以在方法上直接指定注解 @Lock
,使用更加方便。
直接使用,AOP 切面生效即可。
@Service
public class UserService {
@Lock
public String queryUserName(Long userId) {
}
@Lock(value = "#user.name")
public void queryUserName2(User user) {
}
}
@Lock
属性说明,value 用于指定 key,支持 SPEL 表达式。
其他属性,和引导类的方法参数一一对应。
public @interface Lock {
String value() default "";
TimeUnit timeUnit() default TimeUnit.SECONDS;
long waitLockTime() default 10;
long lockTime() default 60;
}
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>lock-SpringBoot-starter</artifactId>
<version>1.3.0</version>
</dependency>
同 spring
支持锁的可重入
持有锁的线程可以多次获取锁
分布式锁注解支持
以上就是Java实现开箱即用的redis分布式锁的详细内容,更多关于Java redis分布式锁的资料请关注编程网其它相关文章!
--结束END--
本文标题: Java实现开箱即用的redis分布式锁
本文链接: https://lsjlt.com/news/174577.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0