Spring boot 配置 Redis集模式
阿新 • • 發佈:2018-12-15
Spring官方提供了Redis叢集的配置,這裡不復述官方的文件,這篇文章主要指導讀者手動配置Redis叢集
以下是我搜集並整理出來的一個configuration,不足之處或錯誤請大家提出並指正
package cn.xt.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.RedisNode; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.util.StringUtils; import redis.clients.jedis.JedisPoolConfig; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * Redis 配置叢集 * @date 2018/10/15 9:51 */ @Configuration public class RedisConfig { private final Logger logger = LoggerFactory.getLogger(RedisConfig.class); // private final String defaultClusterNodes = "10.16.5.43:6379,10.16.5.44:6379,10.16.5.45:6379"; @Value("${redis.cluster.nodes}") private String clusterNodes; @Value("${redis.password}") private String password; @Value("${redis.pool.max-active}") private Integer maxTotal; @Value("${redis.pool.max-idle}") private Integer maxIdle; @Value("${redis.pool.min-idle}") private Integer minIdle; @Value("${redis.pool.max-wait}") private Integer maxWaitMillis; /** * 建立連線工廠 * @return */ @Bean public JedisConnectionFactory createConnectionFactory() { JedisConnectionFactory jedisConnectionFactory = null; // 叢集模式 RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(); // 載入伺服器叢集節點 Set<String> serviceRedisNodes = new HashSet<>(Arrays.asList(clusterNodes.split(","))); try { // 轉換成Redis點節 Set<RedisNode> clusterNodes = new HashSet<>(serviceRedisNodes.size()); for(String node : serviceRedisNodes) { String[] ipAndPort = StringUtils.split(node, ":"); String ip = ipAndPort[0]; Integer port = Integer.parseInt(ipAndPort[1]); clusterNodes.add(new RedisNode(ip, port)); } redisClusterConfiguration.setClusterNodes(clusterNodes); // Redis 連線池配置 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(maxIdle); poolConfig.setMaxTotal(maxTotal); poolConfig.setMinIdle(minIdle); poolConfig.setMaxWaitMillis(maxWaitMillis); // 建立連線工廠 jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration, poolConfig); // 設定資料庫 jedisConnectionFactory.setDatabase(0); // 設定密碼 jedisConnectionFactory.setPassword(password); } catch (Exception e) { logger.error("建立Redis連線工廠錯誤:{}", e); } return jedisConnectionFactory; } /** * 註冊RedisTemplate * @param factory 連線工廠 * @return */ @Bean public RedisTemplate registerRedisTemplate(JedisConnectionFactory factory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(factory); return redisTemplate; } }