1.引入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.0</version>
</dependency>
2.配置文件application.yml
spring:
redis:
host: 127.0.0.1
port: 6379
database: 1
password: 123456
3.Redisson配置类
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 Administrator
*/
@Configuration
public class RedissonClientConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private String redisPort;
@Value("${spring.redis.password:-1}")
private String redisPass;
@Bean
public RedissonClient createRedissonClient(){
Config config = new Config();
SingleServerConfig serverConfig = config.useSingleServer().setAddress("redis://" + redisHost + ":" + redisPort);
if(!redisPass.equals("-1")) {
serverConfig.setPassword(redisPass);
}
serverConfig.setConnectionMinimumIdleSize(5);
RedissonClient redissonClient = Redisson.create(config);
return redissonClient;
}
}
4.Redisson具体使用
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
/**
* 1. @description: Redisson分布式锁
* 2. @author: xh
* 3. @time: 2022/5/18
*/
@Component
public class RedissonLockDemo {
/**
* 尝试获取锁的时间 单位 秒
*/
private static short TRY_LOCK_TIME = 2;
/**
* 锁自动释放时间 单位 秒
*/
private static short AUTOMATIC_TIME = 60;
@Resource
private RedissonClient redissonClient;
/**
* 加锁
* @param key 需要加锁的信息
*/
public void testLock(String key) {
RLock lock = this.redissonClient.getLock(key);
try {
if (lock.tryLock(TRY_LOCK_TIME, AUTOMATIC_TIME, TimeUnit.SECONDS)) {
/**
* 加锁成功后的业务逻辑
*/
} else {
/**
* 加锁失败后的业务逻辑
*/
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock != null && lock.isLocked() && lock.isHeldByCurrentThread()) {
//释放锁
lock.unlock();
}
}
}
}