Redisson 提供两种配置方式
1. 第一种使用配置json文件 在application.properties 中使用 spring.redis.redisson.file=classpath:redisson.json
2. 第二种spring.redis.redisson.config=里使用yaml格式如下
spring:
redis:
redisson:
config: |
clusterServersConfig:
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
failedSlaveReconnectionInterval: 3000
failedSlaveCheckInterval: 60000
password: null
subscriptionsPerConnection: 5
clientName: null
loadBalancer: !<org.redisson.connection.balancer.RoundRobinLoadBalancer> {}
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 50
slaveConnectionMinimumIdleSize: 24
slaveConnectionPoolSize: 64
masterConnectionMinimumIdleSize: 24
masterConnectionPoolSize: 64
readMode: "SLAVE"
subscriptionMode: "SLAVE"
nodeAddresses:
- "redis://127.0.0.1:7004"
- "redis://127.0.0.1:7001"
- "redis://127.0.0.1:7000"
scanInterval: 1000
pingConnectionInterval: 0
keepAlive: false
tcpNoDelay: false
threads: 16
nettyThreads: 32
codec: !<org.redisson.codec.Kryo5Codec> {}
transportMode: "NIO"
Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token ‘singleServerConfig’: was expecting (JSON String, Number, Array, Object or token ‘null’, ‘true’ or ‘false’)
导致有的配置的变量名已经变更,使用老的配置项名称已经无法映射的配置对象上,如pingTimeout
和useLinuxNativeEpoll
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field “pingTimeout”
Caused by: org.redisson.client.RedisException: ERR Client sent AUTH, but no password is set. channel: [id: 0xadf834eb, L:/20.0.2.11:65046 - R:epaas.e6gpshk.com/172.20.6.37:6379] command: (AUTH), params: (password masked)
如果redis服务器没有配置密码,则配置文件里面不能出现密码配置
如果服务端配置了密码,则配置文件中需要配置密码,不然错误信息如下
Caused by: org.redisson.client.RedisException: ERR Client sent AUTH, but no password is set. channel: [id: 0xadf834eb, L:/20.0.2.11:65046 - R:epaas.e6gpshk.com/172.20.6.37:6379] command: (AUTH), params: (password masked)
如果使用jackson导致序列化字符串后,字符串带两个双引号,导致获取的时候查出来为空。
解决方法配置字符串序列化
可以通过以下步骤进行配置:
Config config = new Config();
StringCodec stringCodec = new StringCodec(Charset.forName("UTF-8"));
// 或者使用其他支持的编码方式,如ISO-8859-1
config.setCodec(stringCodec);
RedissonClient redissonClient = Redisson.create(config);
可以将Redisson的string类型数据的序列化方式配置为指定的编码方式。一般使用UTF-8编码方式,你也可以根据实际需求选择其他编码方式。
示例代码:
Config config = new Config();
config.setCodec(new JsonJacksonCodec()); // 使用Jackson序列化
RedissonClient redisson = Redisson.create(config);
示例配置:
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379")
.setConnectionPoolSize(100) // 设置连接池大小
.setConnectionMinimumIdleSize(10) // 设置最小空闲连接数
.setConnectTimeout(3000); // 设置连接超时时间
RedissonClient redisson = Redisson.create(config);
示例配置(哨兵模式):
Config config = new Config();
config.useSentinelServers()
.addSentinelAddress("redis://127.0.0.1:26379")
.addSentinelAddress("redis://127.0.0.1:26380")
.setMasterName("mymaster");
RedissonClient redisson = Redisson.create(config);
示例代码(分布式锁):
RLock lock = redisson.getLock("myLock");
lock.lock();
try {
// 执行需要互斥的操作
} finally {
lock.unlock();
}
示例配置(异步操作):
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379")
.setConnectionPoolSize(100)
.setNettyThreads(0)
.setThreads(0)
.setTransportMode(TransportMode.EPOLL)
.setUseLinuxNativeEpoll(true); // 使用异步操作提高性能
RedissonClient redisson = Redisson.create(config);
10 . Redisson的版本兼容问题:
示例代码(Maven依赖):
<dependency>
<groupId>org.redissongroupId>
<artifactId>redissonartifactId>
<version>3.15.2version>
dependency>