基于springboot的redis集群配置

使用yml配置文件形式配置redis连接, 也可直接使用RedisTemplate默认配置,就可不用创建以下代码内容,只需编写yml文件即可。
至此就可以使用 RedisTemplate的自带API进行与redis的交互。

RedisClusterConf.java


package cn.com.xxx.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.MapPropertySource;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashMap;
import java.util.Map;

/**
* @description RedisConf 配置
* @author qijunyu
* @date 2017/11/15 10:59
*/
@Configuration
public class RedisClusterConf {

private static final Logger logger = LoggerFactory.getLogger(RedisClusterConf.class);

@Value("${redis.cluster.nodes}")
private String clusterNodes;

// Redis服务器地址
@Value("${redis.host}")
private String host;
// Redis服务器连接端口
@Value("${redis.port}")
private int port;
// Redis服务器连接密码(默认为空)
@Value("${redis.password}")
private String password;
// 连接超时时间(毫秒)
@Value("${redis.timeout}")
private int timeout;
// Redis数据库索引(默认为0
@Value("${redis.database}")
private int database;
// 连接池最大连接数(使用负值表示没有限制)
@Value("${redis.pool.max-active}")
private int maxTotal;
// 连接池最大阻塞等待时间(使用负值表示没有限制)
@Value("${redis.pool.max-wait}")
private int maxWaitMillis;
// 连接池中的最大空闲连接
@Value("${redis.pool.max-idle}")
private int maxIdle;
// 连接池中的最小空闲连接
@Value("${redis.pool.min-idle}")
private int minIdle;

@Bean(name = "jedisClusterConfig")
public RedisClusterConfiguration getClusterConfiguration()
{
Map, Object> source = new HashMap, Object>();
source.put("spring.redis.cluster.nodes", clusterNodes);
source.put("spring.redis.cluster.timeout", timeout);
source.put("spring.redis.cluster.max-redirects", 5);

return new RedisClusterConfiguration(new MapPropertySource("RedisClusterConfiguration", source));
}

/**
* 配置JedisPoolConfig
* @return JedisPoolConfig实体
*/
@Bean(name = "jedisPoolConfig")
public JedisPoolConfig jedisPoolConfig() {
logger.info("=== XXX RedisConf jedisPoolConfig 初始化JedisPoolConfi ===");
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 连接池最大连接数(使用负值表示没有限制)
jedisPoolConfig.setMaxTotal(this.maxTotal);
// 连接池最大阻塞等待时间(使用负值表示没有限制)
jedisPoolConfig.setMaxWaitMillis(this.maxWaitMillis);
// 连接池中的最大空闲连接
jedisPoolConfig.setMaxIdle(this.maxIdle);
// 连接池中的最小空闲连接
jedisPoolConfig.setMinIdle(this.minIdle);
// jedisPoolConfig.setTestOnBorrow(true);
// jedisPoolConfig.setTestOnCreate(true);
// jedisPoolConfig.setTestWhileIdle(true);
return jedisPoolConfig;
}

/**
* 实例化 RedisConnectionFactory 对象
* @param poolConfig
* @return
*/
@Bean(name = "jedisConnectionFactory")
public RedisConnectionFactory jedisConnectionFactory(@Qualifier(value = "jedisClusterConfig") RedisClusterConfiguration poolConfig) {
logger.info("=== XXX RedisConf jedisConnectionFactory 初始化JedisPoolConfi ===");
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig);
jedisConnectionFactory.setHostName(this.host);
jedisConnectionFactory.setPort(this.port);
jedisConnectionFactory.setDatabase(this.database);
jedisConnectionFactory.setTimeout(this.timeout);
return jedisConnectionFactory;
}

/**
* 实例化 RedisTemplate 对象
* @return
*/
@Bean(name = "redisTemplate")
public RedisTemplate, String> functionDomainRedisTemplate(@Qualifier(value = "jedisConnectionFactory") RedisConnectionFactory factory) {
logger.info("=== XXX RedisConf functionDomainRedisTemplate 初始化JedisPoolConfi ===");
RedisTemplate, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new EntityRedisSerializer());
redisTemplate.setValueSerializer(new EntityRedisSerializer());
redisTemplate.afterPropertiesSet();
redisTemplate.setEnableTransactionSupport(true);
return redisTemplate;
}
}
application.yml
redis:
# Redis 服务器地址
host: 127.0.0.1
# Redis 服务器连接端口
port: 7000
# Redis 服务器连接密码(默认为空)
password:
# 连接超时时间(毫秒)
timeout: 0
# Redis 数据库索引(默认为 0
database: 0
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 8
# 连接池中的最小空闲连接
min-idle: 0
cluster:
nodes: 127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002



你可能感兴趣的:(springboot)