Rediison pom
版本問(wèn)題請(qǐng)參考:https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter
<!--注意版本問(wèn)題 我的SpringBoot版本是2.1.0.RELEASE-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.15.6</version>
<exclusions>
<exclusion>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-24</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-data-21</artifactId>
<version>3.15.6</version>
</dependency>
Rediison yml 配置
spring:
application:
# 模塊名稱
name: xxx
redis:
# redis地址
host: 127.0.0.1
# redis端口
port: 6379
# redis索引
database: 0
# redis密碼
password:
# redis連接超時(shí)時(shí)間
timeout: 10s
lettuce:
pool:
# redis連接池中的最小空閑連接
min-idle: 0
# redis連接池中的最大空閑連接
max-idle: 8
# redis連接池的最大數(shù)據(jù)庫(kù)連接數(shù)
max-active: 8
# redis連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)
max-wait: -1ms
redisson:
config: |
singleServerConfig:
#連接空閑超時(shí),單位:毫秒
idleConnectionTimeout: 10000
#連接超時(shí),單位:毫秒
connectTimeout: 10000
#命令等待超時(shí),單位:毫秒
timeout: 3000
#命令失敗重試次數(shù)
retryAttempts: 3
#命令重試發(fā)送時(shí)間間隔,單位:毫秒
retryInterval: 1500
#單個(gè)連接最大訂閱數(shù)量
subscriptionsPerConnection: 5
#客戶端名稱
clientName: null
#節(jié)點(diǎn)地址
address: "redis://127.0.0.1:6379"
#密碼
password:
#發(fā)布和訂閱連接的最小空閑連接數(shù)
subscriptionConnectionMinimumIdleSize: 1
#發(fā)布和訂閱連接池大小
subscriptionConnectionPoolSize: 50
#最小空閑連接數(shù)
connectionMinimumIdleSize: 32
#連接池大小
connectionPoolSize: 64
#數(shù)據(jù)庫(kù)編號(hào)
database: 0
#DNS監(jiān)測(cè)時(shí)間間隔,單位:毫秒
dnsMonitoringInterval: 5000
#線程池?cái)?shù)量
threads: 0
#Netty線程池?cái)?shù)量
nettyThreads: 0
#編碼
codec: !<org.redisson.codec.JsonJacksonCodec> {}
#傳輸模式
"transportMode":"NIO"
封裝成類和方法
@Component
public class RedissonLock {
@Autowired
private RedissonClient redissonClient;
@Value("${redissonlock.waitTime}")
private String waitTime;
@Value("${redissonlock.leaseTime}")
private String leaseTime;
/**
* 加鎖
*
* @param LockName key名稱
* @return
* @throws InterruptedException
*/
public Boolean acquire(String LockName) throws InterruptedException {
RLock lock = redissonClient.getLock(LockName);
return lock.tryLock(Long.valueOf(waitTime), Long.valueOf(leaseTime), TimeUnit.SECONDS);
}
/**
* 解鎖
*
* @param LockName key名稱
*/
public void release(String LockName) {
RLock lock = redissonClient.getLock(LockName);
if (lock != null && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}