redis

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();
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值