添加redisson pom依赖
org.redisson
redisson-spring-boot-starter
3.17.6
在yml配置文件里填写redis相关信息
spring
redis:
# 地址
host: localhost
# 端口,默认为6379
port: 6379
# 数据库索引
database: 1
# 密码
password:
# 连接超时时间
timeout: 2000
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
添加配置类
package com.ruoyi.framework.config;
import com.ruoyi.common.utils.CheckUtils;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Redisson配置类
*
* @author DaenMax
*/
@Configuration
public class RedissonConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String redisPassword;
@Bean
public RedissonClient getRedisson() {
Config config = new Config();
SingleServerConfig singleServerConfig = config.useSingleServer();
singleServerConfig.setAddress("redis://" + host + ":" + port);
if (CheckUtils.isNotEmpty(redisPassword)) {
singleServerConfig.setPassword(redisPassword);
}
return Redisson.create(config);
}
}
使用demo
@Override
public AjaxResult test() {
RLock lock = redissonClient.getLock(RcmSysConstants.LOCK_TRANS);
System.out.println("等待获取锁中...");
lock.lock(30L, TimeUnit.SECONDS);//这行代码会阻塞,直到其他线程 RcmSysConstants.LOCK_TRANS 这个值的锁被释放
//lock()方法的参数有超时时间,即锁的有效期,不填的话默认-1,永久有效
try {
System.out.println("已经获取到锁,执行业务代码中");
//这里写你的业务代码...省略
//模拟延迟一下
MyUtils.sleep(3000);
return AjaxResult.success("登录成功");
} catch (Exception e) {
System.out.println("发生异常" + e.getMessage());
} finally {
if (lock.isLocked()) {
lock.unlock();
System.out.println("业务代码执行完毕,已解锁");
}
}
return AjaxResult.error("登录失败");
}
测试
因为我这个是controller调用的这个方法,所以我就在用接口测试工具并发5次看看吧
等待获取锁中...
等待获取锁中...
等待获取锁中...
已经获取到锁,执行业务代码中
等待获取锁中...
等待获取锁中...
业务代码执行完毕,已解锁
已经获取到锁,执行业务代码中
业务代码执行完毕,已解锁
已经获取到锁,执行业务代码中
业务代码执行完毕,已解锁
已经获取到锁,执行业务代码中
业务代码执行完毕,已解锁
已经获取到锁,执行业务代码中
业务代码执行完毕,已解锁
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
本文主要面向两类目标读者: 一类是想使用机器学习的生物学家,一类是想进入生物学领域的机器学习研究者。如果你不熟悉生物学或机器学习,仍然欢迎你阅读本文,但有时你可能会觉得有点读不太懂!如果你已经熟悉这两者,那么你可能根本不需要本文 —— 你可以直接跳到我们的示例…