spring boot 2.0 以后默认使用的是 LettuceConnectionFactory,所以驱动是 Lettuce
2020/9/22 更新-- Lettuce 暂时未支持redis6,关注 https://github.com/lettuce-io/lettuce-core/wiki/Lettuce-Versions
public class DataPlatformApplication implements CommandLineRunner {
@Autowired
private RedisTemplate<String,String> redisTemplate;
public static void main(String[] args) {
SpringApplication.run(DataPlatformApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
RedisConnectionFactory redisConnectionFactory = redisTemplate.getConnectionFactory();
System.out.println(redisConnectionFactory);
}
}
一、pom
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
二、代码
package com.giant.cloud.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
/**
* @author big uncle
* @date 2020/7/15 12:08
* @module
**/
@Configuration
@Slf4j
public class RedisConfig {
@Autowired
RedisProperties redisProperties;
/**
* GenericObjectPoolConfig 连接池配置
*/
@Bean
public GenericObjectPoolConfig genericObjectPoolConfig() {
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(redisProperties.getLettuce().getPool().getMaxIdle());
genericObjectPoolConfig.setMinIdle(redisProperties.getLettuce().getPool().getMinIdle());
genericObjectPoolConfig.setMaxTotal(redisProperties.getLettuce().getPool().getMaxActive());
genericObjectPoolConfig.setMaxWaitMillis(redisProperties.getLettuce().getPool().getMaxWait().toMillis());
return genericObjectPoolConfig;
}
/**
* 工厂创建了连接 但是一个单实例
**/
@Bean
public LettuceConnectionFactory redisConnectionFactory(GenericObjectPoolConfig genericObjectPoolConfig) {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(redisProperties.getHost(),redisProperties.getPort());
redisStandaloneConfiguration.setPassword(redisProperties.getPassword());
LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(redisProperties.getTimeout())
.poolConfig(genericObjectPoolConfig)
.build();
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration,clientConfig);
return lettuceConnectionFactory;
}
}
/**
* 集群配置
**/
@Bean
public LettuceConnectionFactory redisConnectionFactory(GenericObjectPoolConfig genericObjectPoolConfig) {
// 集群
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());
redisClusterConfiguration.setMaxRedirects(redisProperties.getCluster().getMaxRedirects());
redisClusterConfiguration.setPassword(redisProperties.getPassword());
// 配置池
LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(redisProperties.getTimeout())
.poolConfig(genericObjectPoolConfig)
.build();
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisClusterConfiguration,clientConfig);
log.debug("redis 集群启动");
return lettuceConnectionFactory;
}
/**
* 哨兵配置
**/
@Bean
public LettuceConnectionFactory redisConnectionFactory(GenericObjectPoolConfig genericObjectPoolConfig) {
RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration(redisProperties.getSentinel().getMaster(),
new HashSet<>(redisProperties.getSentinel().getNodes()));
redisSentinelConfiguration.setPassword(redisProperties.getPassword());
// 配置池
LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(redisProperties.getTimeout())
.poolConfig(genericObjectPoolConfig)
.build();
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisSentinelConfiguration,clientConfig);
log.debug("redis 哨兵启动");
return lettuceConnectionFactory;
}
会自动注入到 RedisTemplate
网友评论