引入依赖
<!-- Redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.24.3</version>
</dependency>
配置说明
单机模式 singleServerConfig
spring:
redis:
redisson:
config: |
singleServerConfig:
idleConnectionTimeout: 10000
# 连接超时时间(毫秒)
connectTimeout: 10000
# 命令执行超时时间(毫秒)
timeout: 3000
retryAttempts: 3
retryInterval: 1500
password: 'NFTurbo666'
subscriptionsPerConnection: 5
clientName: null
# Redis 服务器地址
address: "redis://r-xxxx.redis.rds.aliyuncs.com:6379"
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
# 连接池最小空闲连接数
connectionMinimumIdleSize: 24
# 连接池最大连接数
connectionPoolSize: 64
database: 0
dnsMonitoringInterval: 5000
threads: 16
nettyThreads: 32
# 序列化方式
codec: !<org.redisson.codec.JsonJacksonCodec> {}
transportMode: "NIO"
集群模式 clusterServersConfig
clusterServersConfig:
# 集群节点地址列表
nodeAddresses:
- "redis://127.0.0.1:7000"
- "redis://127.0.0.1:7001"
- "redis://127.0.0.1:7002"
# 用于负载均衡的连接池大小
slaveConnectionPoolSize: 250
# 主节点连接池大小
masterConnectionPoolSize: 250
# 连接超时时间(毫秒)
connectTimeout: 3000
# 命令执行超时时间(毫秒)
timeout: 3000
主从模式 masterSlaveServersConfig
masterSlaveServersConfig:
# 主节点地址
masterAddress: "redis://127.0.0.1:6379"
# 从节点地址列表
slaveAddresses:
- "redis://127.0.0.1:6380"
- "redis://127.0.0.1:6381"
# 主节点连接池大小
masterConnectionPoolSize: 250
# 从节点连接池大小
slaveConnectionPoolSize: 250
# 连接超时时间(毫秒)
connectTimeout: 3000
# 命令执行超时时间(毫秒)
timeout: 3000
哨兵模式 sentinelServersConfig
sentinelServersConfig:
# 主节点名称
masterName: "mymaster"
# 哨兵节点地址列表
sentinelAddresses:
- "redis://127.0.0.1:26379"
- "redis://127.0.0.1:26380"
# 主节点连接池大小
masterConnectionPoolSize: 250
# 从节点连接池大小
slaveConnectionPoolSize: 250
# 连接超时时间(毫秒)
connectTimeout: 3000
# 命令执行超时时间(毫秒)
timeout: 3000
常规代码使用
通过Autowired注入RedissonClient客户端
@Autowired
private RedissonClient redissonClient;
RedissonClient 常用方法:
# getSet获取Redis中的无序集合对象
redissonClient.getSet("SET_KEY_NAME");
# 添加元素到无序集合中
redissonClient.add(elements);
# 批量添加元素到无序集合中:
redissonClient.addAll(elements);
# 移除指定元素从无序集合中:
redissonClient.remove(element);
# 判断无序集合中是否包含指定元素:
redissonClient.contains(element);
# 从缓存中获取键值对,如果键存在则返回其值,否则返回null
redissonClient.getIfPresent(elements);
redissonClient.put(elements, true);
通过Autowired注入RedissonClient后,不会自动关闭RedissonClient
,所以需要手动关闭
redissonClient.shutdown();
实现自动关闭的两种方式
- 使用
@PreDestroy
注解:可以在包含RedissonClient
的 Bean 类中,使用@PreDestroy
注解来标记一个方法,该方法会在 Spring 容器关闭时被调用,用于执行RedissonClient
的关闭操作。示例如下:
@Component
public class RedissonClientWrapper {
@Autowired
private RedissonClient redissonClient;
// 其他业务方法
@PreDestroy
public void shutdownRedissonClient() {
redissonClient.shutdown();
}
}
- 使用
@Configuration
和@Bean
的destroyMethod
属性:在配置类中,通过@Bean
注解定义RedissonClient
的 Bean,并使用destroyMethod
属性指定关闭方法。
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
}