1、maven座標
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.5.7</version>
</dependency>
2、配置(一種是單節點,另外一種是哨兵)
redisson.single-is=true
redisson.single-address=127.0.0.1:6379
redisson.single-password=123456
redisson.sentinel-is=false
redisson.sentinel-master-name=business-master
redisson.sentinel-addresses=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
redisson.sentinel-password=123456
3、redis配置類
package com.lee.mybatis.plus.utils;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.apache.commons.lang3.StringUtils;
import org.redisson.config.SentinelServersConfig;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
@Value("${redisson.single-address}")
private String singleAddress;
@Value("${redisson.single-password}")
private String singlePassword;
@Value("${redisson.sentinel-master-name}")
private String sentinelMasterName;
@Value("${redisson.sentinel-addresses}")
private String sentinelAddresses;
@Value("${redisson.sentinel-password}")
private String sentinelPassword;
/**
* 單機模式自動裝配
* @return
*/
@Bean
@ConditionalOnProperty(name="redisson.single-is",havingValue="true")
public RedissonClient getSingleRedisson(){
Config config = new Config();
SingleServerConfig serverConfig = config.useSingleServer().setAddress("redis://" + singleAddress);
if(StringUtils.isNotBlank(singlePassword)){
serverConfig.setPassword(singlePassword);
}
return Redisson.create(config);
}
/**
* 哨兵模式自動裝配
* @return
*/
@Bean
@ConditionalOnProperty(name="redisson.sentinel-is",havingValue="true")
public RedissonClient getSentinelRedisson(){
Config config = new Config();
SentinelServersConfig serverConfig = config.useSentinelServers().addSentinelAddress(sentinelAddresses).setMasterName(sentinelMasterName);
if(StringUtils.isNotBlank(sentinelPassword)) {
serverConfig.setPassword(sentinelPassword);
}
return Redisson.create(config);
}
}
4、使用
@Autowired
private RedissonClient redissonClient;
@GetMapping("/subNum")
public Map<String, String> subNum(String lockName) {
HashMap<String, String> map = new HashMap<>();
//獲取鎖
RLock rlock = redissonClient.getLock(lockName);
try {
//等待5秒,鎖過期時間6秒,單位:秒
boolean isLock = rlock.tryLock(5, 6, TimeUnit.SECONDS);
if (isLock) {
//業務邏輯
}
} catch (Exception e) {
//skip
}finally {
//釋放鎖
rlock.unlock();
}
return map;
}