1.添加pom依赖
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.6</version>
</dependency>
2.Redis配置文件
#系统配置,已省略其他无关配置参数
spring:
redis:
host: 192.168.0.167
port: 6379
password: helloworld
3.启动类配置Redisson
/** 地址 **/
@Value("${spring.redis.host}")
private String host;
/** 接口 **/
@Value("${spring.redis.port}")
private String port;
/** 密码 **/
@Value("${spring.redis.password}")
private String password;
/** redis数据库 **/
private int database = 1;
@Bean
public Redisson redisson() {
// 单机模式
Config config = new Config();
config.useSingleServer().setAddress("redis://" + host + ":" + port).setPassword(password).setDatabase(database);
return (Redisson) Redisson.create(config);
}
4.具体实现
public JsonResult createOrder(Map map) {
// 锁key
String key = "payOnline";
// 是否加锁成功
boolean res = false;
// 设置锁
RLock lock = redisson.getLock(key);
try {
// 加锁。成功true,失败false
// 3秒加锁等待时间,若3秒内无法加锁,则返回false
// 10秒后自动释放锁,若10秒内业务逻辑未执行完,通过内部监控自动续时,每次续时约1/3的自动释放锁时间,默认最多续时30秒
res = lock.tryLock(3, 10, TimeUnit.SECONDS);
if (res) {
// 执行业务代码
return new JsonResult(payOnline(map));
} else {
return JsonResult.fail("您的网络不稳定,请稍后重试。");
}
} catch (Exception e) {
return JsonResult.fail("您的网络不稳定,请稍后重试。");
} finally {
if (res) { // 释放锁
lock.unlock();
}
}
}