package cn.com.bsfit.aop.config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import redis.clients.jedis.JedisPoolConfig; import java.util.HashSet; import java.util.Set; @Configuration //@EnableConfigurationProperties //@ConditionalOnProperty(name = {"frms.common.cache.type"},havingValue = "REDIS") public class RedisConfig { @Value("${frms.common.redis.maxTotal:5}") private int maxTotal; @Value("${frms.common.redis.maxIdle:5}") private int maxIdle; @Value("${frms.common.redis.maxWaitMillis:3000}") private long maxWaitMillis; @Value("${frms.common.redis.testOnBorrow:true}") private boolean testOnBorrow; @Value("${frms.common.redis.host:localhost}") private String host; @Value("${frms.common.redis.timeout:1000}") private int timeout; @Value("${frms.common.redis.maxAttempts:3}") private int maxAttempts; @Bean public JedisPoolConfig jedisPoolConfig(){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMaxTotal(maxTotal); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); jedisPoolConfig.setTestOnBorrow(testOnBorrow); return jedisPoolConfig; } @Bean public RedisClusterConfiguration redisClusterConfiguration(){ String [] serverArray = host.split(","); Set<String> nodes = new HashSet<>(); for (String ipPort : serverArray){ nodes.add(ipPort.trim()); } return new RedisClusterConfiguration(nodes); } @Bean public JedisConnectionFactory jedisConnectionFactory(@Qualifier("jedisPoolConfig") JedisPoolConfig jedisPoolConfig,@Qualifier("redisClusterConfiguration") RedisClusterConfiguration redisClusterConfiguration){ return new JedisConnectionFactory(redisClusterConfiguration,jedisPoolConfig); } @Bean(name = {"redisTemplate"}) @Primary public RedisTemplate redisTemplate(@Qualifier("jedisConnectionFactory") JedisConnectionFactory jedisConnectionFactory){ RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(jedisConnectionFactory); GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); //key与value序列化网上找的。决策项目没有配置,而是在CacheBoImpl里写的 // 设置值(value)的序列化采用FastJsonRedisSerializer。 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // 设置键(key)的序列化采用StringRedisSerializer。 redisTemplate.setKeySerializer(new StringRedisSerializer()); return redisTemplate; } } |
package cn.com.bsfit.aop.config; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; /** *初始化Jedis连接池 */ public class JedisPoolConfig { private static JedisPool pool = null; /** * 静态代码块 构建redis连接池 */ static { if (pool == null) { redis.clients.jedis.JedisPoolConfig config = new redis.clients.jedis.JedisPoolConfig(); //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取; //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 config.setMaxTotal(50); //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。 config.setMaxIdle(10); //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;单位毫秒 //小于零:阻塞不确定的时间, 默认-1 config.setMaxWaitMillis(1000 * 100); //在borrow(引入)一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; config.setTestOnBorrow(true); //return 一个jedis实例给pool时,是否检查连接可用性(ping()) config.setTestOnReturn(true); //connectionTimeout 连接超时(默认2000ms) //soTimeout 响应超时(默认2000ms) pool = new JedisPool(config, "192.168.1.1", 6379, 10000); } } /** * 方法描述 获取Jedis实例 * * @return */ public static Jedis getJedis() { return pool.getResource(); } /** * 方法描述 释放jedis连接资源 * * @param jedis */ public static void returnResource(Jedis jedis) { if (jedis != null) { jedis.close(); } } } |
redis
最新推荐文章于 2025-05-12 16:58:03 发布