redisson-spring-boot-starter
目前有很多项目还在使用jedis的 setNx 充当分布式锁,然而这个锁是有问题的,redisson是java支持redis的redlock的唯一实现,
集成该项目后只需要极少的配置.就能够使用redisson的全部功能. 目前支持
集群模式,云托管模式,单Redis节点模式,哨兵模式,主从模式 配置. 支持 可重入锁,公平锁,联锁,红锁,读写锁 锁定模式
介绍
我们为什么需要redisson?
redisson目前是官方唯一推荐的java版的分布式锁,他支持 redlock.具体请查看 官方文档
jedis为什么有问题?
目前jedis是只支持单机的.
jedis setNx 和设置过期时间是不同步的,在某些极端的情况下会发生死锁.导致程序崩溃.如果没有设置value,
线程1可能会释放线程2的锁 详情看下这篇 博客
软件架构
spring boot
安装教程
引入 pom.xml
com.zengtengpeng
redisson-spring-boot-starter
1.0.1
使用说明
在 application.properties 增加
#单Redis节点模式
redisson.singleServerConfig.address=127.0.0.1:6379
2.在方法增加 @Lock 注解
//支持 spel 表达式 如果后面需要接字符串的话请用`+`连接. 字符串一定要打`单引号`
@Lock(keys = "#user.name+'locks'")
public String test(User user) {
System.out.println("进来了test");
return "test";
}
完毕
进阶篇
@Lock 注解参数介绍
/**
* REENTRANT(可重入锁),FAIR(公平锁),MULTIPLE(联锁),REDLOCK(红锁),READ(读锁), WRITE(写锁),
* AUTO(自动模式,当参数只有一个.使用 REENTRANT 参数多个 MULTIPLE)
*/
LockModel lockModel() default LockModel.AUTO;
/**
* 需要锁定的keys
* @return
*/
String[] keys() default {};
/**
* 锁超时时间,默认30000毫秒(可在配置文件全局设置)
* @return
*/
long lockWatchdogTimeout() default 0;
/**
* 等待加锁超时时间,默认10000毫秒 -1 则表示一直等待(可在配置文件全局设置)
* @return
*/
long attemptTimeout() default 0;
如何使用redisson 客户端实现自定义操作,只需要在spring 容器中注入redisson客户端就行,如下:
@Autowired
private RedissonClient redis