Spring Boot不同版本Redis设置JedisConnectionFactory的方式。
最近重构项目想引入Redis,之前1.0版本看项目里用的本地缓存Guava,这次重构后考虑要不要加入Redis。打算试试~
因为我以前做的项目用的Spring Boot版本比较低。还是老的 1.5.X版本的。 之前设置 JedisConnectionFactory 的方式与现在 2.X 版本有点不一样,所以记录一下,方便以后查看。
1.X 版本
设置 JedisConnectionFactory 方法:
代码语言:javascript复制 @Bean
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
String[] hostAndPorts = env.getProperty("spring.redis.cluster.nodes").split(",");
JedisConnectionFactory jedisConnectionFactory = null;
if(hostAndPorts.length==1){
//单机版
String host = hostAndPorts[0].split(":")[0];
int port = Integer.valueOf(hostAndPorts[0].split(":")[1]);
String password = env.getProperty("spring.redis.password");
jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
jedisConnectionFactory.setDatabase(1);
jedisConnectionFactory.setHostName(host);
jedisConnectionFactory.setPassword(password);
jedisConnectionFactory.setPort(port);
jedisConnectionFactory.setTimeout(5000);
jedisConnectionFactory.afterPropertiesSet();
}else{
//集群版
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
String password = env.getProperty("spring.redis.password");
Set<RedisNode> nodes = new HashSet<RedisNode>();
for (String ipPort:hostAndPorts){
String[] ipAndPort = ipPort.split(":");
nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1])));
}
redisClusterConfiguration.setClusterNodes(nodes);
redisClusterConfiguration.setMaxRedirects(200);
jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration,jedisPoolConfig);
jedisConnectionFactory.setPassword(password);
jedisConnectionFactory.afterPropertiesSet();
}
return jedisConnectionFactory;
}
在 2.X 版本使用的话会提示方法已过期,推荐使用下面的方法。
2.X 版本
1.
2.X 版本可以使用 RedisStandaloneConfiguration 来配置连接信息。
代码语言:javascript复制 @Bean
public JedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(env.getProperty("spring.redis.host"));
redisStandaloneConfiguration.setPort(Integer.parseInt(env.getProperty("spring.redis.port")));
redisStandaloneConfiguration.setPassword(env.getProperty("spring.redis.password"));
redisStandaloneConfiguration.setDatabase(Integer.parseInt(env.getProperty("spring.redis.database")));
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
2.
以上配置使用的是直接连接 Redis 的方式,即每次连接都创建新的连接。当并发量剧增时,这会带来性能上开销,同时由于没有对连接数进行限制,则可能使服务器崩溃导致无法响应。
所以一般情况下都会建立连接池,事先初始化一组连接,供需要 Redis 连接的线程取用。
代码语言:javascript复制 @Bean
public JedisConnectionFactory redisConnectionFactory() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(200);
jedisPoolConfig.setMaxIdle(150);
jedisPoolConfig.setMinIdle(50);
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(env.getProperty("spring.redis.host"));
redisStandaloneConfiguration.setPort(Integer.parseInt(env.getProperty("spring.redis.port")));
redisStandaloneConfiguration.setPassword(env.getProperty("spring.redis.password"));
redisStandaloneConfiguration.setDatabase(Integer.parseInt(env.getProperty("spring.redis.database")));
JedisClientConfiguration.JedisClientConfigurationBuilder configurationBuilder = JedisClientConfiguration.builder();
JedisClientConfiguration jedisClientConfiguration = configurationBuilder.usePooling().poolConfig(jedisPoolConfig).build();
return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
}
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/springboot不同版本redis设置jedisconnectionfactory