package com.newfiber.system.redis; 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.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisPassword; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.jedis.JedisClientConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import redis.clients.jedis.JedisPoolConfig; @Configuration public class RedisTemplateConfig { @Value("${spring.redis2.host}") private String host; @Value("${spring.redis2.port}") private int port; @Value("${spring.redis2.password}") private String password; //下面参数也可以配置在application.properties文件中 private static final int MAX_IDLE = 1000; //最大空闲连接数 private static final int MAX_TOTAL = 1024; //最大连接数 private static final long MAX_WAIT_MILLIS = 100000; //建立连接最长等待时间 @Bean(name = "maintenanceTemplate") public StringRedisTemplate redisMoocTemplate() { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory( redisConnectionFactory(host, port, password, MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, 0)); return template; } //连接池配置 public JedisPoolConfig jedisPoolConfig(int maxIdle, int maxTotal, long maxWaitMillis, boolean testOnBorrow) { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(maxIdle); poolConfig.setMaxTotal(maxTotal); poolConfig.setMaxWaitMillis(maxWaitMillis); poolConfig.setTestOnBorrow(testOnBorrow); return poolConfig; } public RedisConnectionFactory redisConnectionFactory(String host, int port, String password, int maxIdle, int maxTotal, long maxWaitMillis, int index) { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); //设置redis服务器的host或者ip地址 redisStandaloneConfiguration.setHostName(host); //设置默认使用的数据库 redisStandaloneConfiguration.setDatabase(index); //设置密码 redisStandaloneConfiguration.setPassword(RedisPassword.of(password)); //设置redis的服务的端口号 redisStandaloneConfiguration.setPort(port); //获得默认的连接池构造器(怎么设计的,为什么不抽象出单独类,供用户使用呢) JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder(); //指定jedisPoolConifig来修改默认的连接池构造器(真麻烦,滥用设计模式!) jpcb.poolConfig(jedisPoolConfig(maxIdle, maxTotal, maxWaitMillis, false)); //通过构造器来构造jedis客户端配置 JedisClientConfiguration jedisClientConfiguration = jpcb.build(); //单机配置 + 客户端配置 = jedis连接工厂 JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration); jedisConnectionFactory.afterPropertiesSet(); return jedisConnectionFactory; } }