MyJedisConfig.java 3.62 KB
package com.topdraw.redis.config;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.connection.*;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import javax.annotation.Resource;
import java.util.HashSet;
import java.util.Set;

/**
 * @author :
 * @description:
 * @function :
 * @date :Created in 2022/2/27 10:39
 * @version: :
 * @modified By:
 * @since : modified in 2022/2/27 10:39
 */
@Configuration
@Slf4j
public class MyJedisConfig {

    /***生产环境要打开此配置*/
    @Value("${spring.redis.sentinel.master:''}")
    private String master;
    @Value("${spring.redis.sentinel.nodes:''}")
    private String sentinelHost;
    @Value(("${spring.redis.host:''}"))
    private String host;
    @Value(("${spring.redis.port:''}"))
    private String port;
    @Value(("${spring.redis.timeout:''}"))
    private String timeout;

    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(15);
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMinIdle(5);
        jedisPoolConfig.setMaxWaitMillis(10000);
        jedisPoolConfig.setTestOnBorrow(true);
        return jedisPoolConfig;
    }

    @Bean
    public Jedis jedisPool(JedisPoolConfig jedisPoolConfig) {
        log.info("spring.redis.sentinel.nodes: {}", sentinelHost);
        if (StringUtils.isNotEmpty(sentinelHost) && !"''".equals(sentinelHost)) {
            log.info("哨兵模式");
            String[] split = sentinelHost.split(",");
            Set<String> sentinels = new HashSet<>();
            for (int i = 0; i < split.length; i++) {
                String s = split[i];
                sentinels.add(s);
            }

            JedisSentinelPool jedisPool = new JedisSentinelPool(master, sentinels, jedisPoolConfig);
            Jedis jedis = jedisPool.getResource();
            return jedis;
        }else {
            log.info("单台Redis, host: {}, port: {}, timeout: {}", host, port, timeout);
            JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, Integer.parseInt(port), Integer.parseInt(timeout));
            return jedisPool.getResource();
        }
    }


//    @Bean
//    public Jedis jedisPool(@Value("${spring.redis.host}") String host,
//                               @Value("${spring.redis.port}") int port,
//                               @Value("${spring.redis.timeout}") int timeout,
////                           @Value("${spring.redis.password}") String password,
//                           JedisPoolConfig jedisPoolConfig) {
//
////        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout,"redis123");
//        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
//
//        return jedisPool.getResource();
//    }

}