一 背景
一定压力下,Redis的主从结构还是容易出问题,升级到Redis集群模式会提高性能。
如何平滑升级是需要重点考虑的。这里不展开,项目中升级遇到新项目springboot.老项目spring。这里看下如何集成。
二 xml 整合
首先推荐官网,看懂官网就不用看我啰嗦了。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:redisson="http://redisson.org/schema/redisson"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://redisson.org/schema/redisson
http://redisson.org/schema/redisson/redisson.xsd">
<redisson:client
id="redissonCilent"
netty-threads="20"
threads="20"
codec-ref="org.redisson.codec.JsonJacksonCodec">
<redisson:cluster-servers
idle-connection-timeout="10000"
ping-timeout="1000"
connect-timeout="10000"
timeout="3000"
retry-attempts="3"
retry-interval="1500"
reconnection-timeout="3000"
failed-attempts="3"
password="test"
subscriptions-per-connection="5"
client-name="none"
load-balancer-ref="org.redisson.connection.balancer.RoundRobinLoadBalancer"
subscription-connection-minimum-idle-size="1"
subscription-connection-pool-size="50"
slave-connection-minimum-idle-size="10"
slave-connection-pool-size="6400"
master-connection-minimum-idle-size="50"
master-connection-pool-size="6400"
read-mode="SLAVE"
subscription-mode="SLAVE"
scan-interval="1000"
>
<redisson:node-address value="redis://10.1.1.1:1110" />
<redisson:node-address value="redis://10.1.1.1:1111" />
<redisson:node-address value="redis://10.1.1.1:1112" />
<redisson:node-address value="redis://10.1.1.1:1114" />
<redisson:node-address value="redis://10.1.1.1:1115" />
<redisson:node-address value="redis://10.1.1.1:1113" />
</redisson:cluster-servers>
</redisson:client>
</beans>
三 config 配置
2.1. 程序化配置方法
Redisson程序化的配置方法是通过构建Config
对象实例来实现的。例如:
Config config = new Config(); config.setTransportMode(TransportMode.EPOLL); config.useClusterServers() //可以用"rediss://"来启用SSL连接 .addNodeAddress("redis://127.0.0.1:7181");
@Configuration
public class RedissonOption {
private static final Logger logger = LoggerFactory.getLogger(RedissonOption.class);
private RedissonClient redissonClient;
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonCilent() throws Exception {
return RedissonClientFactoryBean.getRedisson();
}
}
这个factory方法就是上面根据config去创建
return Redisson.create(config);
引用:
@Resource
RedissonClient redissonClient;
使用config而不使用xml或者yaml,json的配置文件,主要想使用动态配置,如集群节点等。
遇到的坑:
java.lang.NoClassDefFoundError: org/nustaq/serialization/FSTObjectOutput
。。。。
缺少jar.
<dependency>
<groupId>de.ruedigermoeller</groupId>
<artifactId>fst</artifactId>
<version>2.56</version>
</dependency>
spring netty包冲突:(不是springboot,它可以选择最新版本)
选用redison版本:
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.5.6</version> </dependency>
另外,一些语法上的不同,如setnx被bucket.tryset替换等,看下api就好了。