添加pom.xml引用:
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--redisson-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>${org.redisson.version}</version>
</dependency>
application.yml配置:
redission:
database2: true
是我另外加的,用于判断是否启用redission,这里redission使用第二个数据库
spring:
redis:
host: XXXX
port: 6379
password: XXXX
database: 0
redission:
database2: true
jedis:
pool:
# 连接池中的最大空闲连接
max-idle: 50
# 连接池最大连接数(使用负值表示没有限制)
max-active: 500
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: 300
# 连接池中的最小空闲连接
min-idle: 5
#空闲对象逐出器线程的运行间隔时间.空闲连接线程释放周期时间
time-between-eviction-runs: 1000
redis配置就省略不写了,
redission配置:
package com.gnetek.monitor.redis.config;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
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;
/**
* @Description redission配置
* @Author Darren Huang
* @Date 2024-03-14 8:51
*/
@Configuration
@ConditionalOnProperty(name = "spring.redis.redission.database2", havingValue = "true")
public class RedissionConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port:6379}")
private int port;
@Value("${spring.redis.password:#{null}}")
private String password;
@Bean
public RedissonClient redissonClient(){
Config config = new Config();
String redisUrl = String.format("redis://%s:%d", host, port);
config.useSingleServer().setAddress(redisUrl).setPassword(password);
config.useSingleServer().setDatabase(2);
config.useSingleServer().setConnectionMinimumIdleSize(10);
return Redisson.create(config);
}
}
注入redissionClient:
// 注入 RedissonClient
@Autowired
RedissonClient redissonClient;
redissionClient的使用方法:
// 每个线程都创建自己的锁对象
// 这是基于 Redis 实现的分布式锁
Lock lock = this.redissonClient.getLock(id);
try {
// 上锁
lock.lock();
// 普通业务逻辑
XXXService.addNumber();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放锁
lock.unlock();
}
法: