All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.support.redis.RedisSupportStarter Maven / Gradle / Ivy


package org.support.redis;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

import java.io.Serializable;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;


/**
 * @author Alexander Lo
 * @version V1.0, 2020-06-30
 * 接入spring
 */
@ConditionalOnProperty({"spring.redis.host"})
@Configuration
@EnableConfigurationProperties({RedisSupportProperty.class})
@Slf4j
public class RedisSupportStarter implements InitializingBean {


    private RedisProperties redisProperties;

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;
    @Autowired
    RedisSupportProperty redisSupportProperty;


    public RedisSupportStarter(RedisProperties redisProperties) {
        this.redisProperties = redisProperties;

    }

    @Override
    public void afterPropertiesSet() throws Exception {
        if (redisSupportProperty.getPrefix().getEnable() && StringUtils.isEmpty(redisSupportProperty.getPrefix().getKey())) {
            throw new Exception("support.redis.prefix.enable 开启的情况下 support.redis.prefix.key 必须设置参数");
        }
        log.info("********   【RedisSupportStarter  ACTIVE】   ********");
    }

    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        this.initDomainRedisTemplate(redisTemplate, this.redisConnectionFactory);
        return redisTemplate;
    }


    private void initDomainRedisTemplate(RedisTemplate redisTemplate, RedisConnectionFactory factory) {
        redisTemplate.setKeySerializer(new PrefixStringKeySerializer(redisSupportProperty));
        redisTemplate.setHashKeySerializer(new PrefixStringKeySerializer(redisSupportProperty));

        //值采取 jackson
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.setConnectionFactory(factory);
    }

    @Bean
    public HashOperations hashOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForHash();
    }

    @Bean
    public ValueOperations valueOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForValue();
    }

    @Bean
    public ListOperations listOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForList();
    }

    @Bean
    public SetOperations setOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForSet();
    }

    @Bean
    public ZSetOperations zSetOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForZSet();
    }

    @Bean(destroyMethod = "destroy")
    ShardedJedisPool jedisPool() {
        RedisProperties p = this.redisProperties;
        log.info("redis configuration = {}", p);
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();

        //lettuce 驱动
        config.setMaxWaitMillis(p.getLettuce().getPool().getMaxWait().getSeconds());
        config.setMaxTotal(p.getLettuce().getPool().getMaxActive());
        config.setMinIdle(p.getLettuce().getPool().getMinIdle());
        config.setMaxIdle(p.getLettuce().getPool().getMaxIdle());
        config.setTestWhileIdle(true);
        config.setTestOnBorrow(true);
        config.setTestOnReturn(true);
        config.setTestOnCreate(true);
        config.setMinEvictableIdleTimeMillis(TimeUnit.MINUTES.toMillis(10L));


        JedisShardInfo info = new JedisShardInfo(p.getHost(), p.getPort(), (int) p.getTimeout().getSeconds() * 1000);

        info.setPassword(StringUtils.isBlank(p.getPassword()) ? null : p.getPassword());
        ShardedJedisPool pool = new ShardedJedisPool(config, Arrays.asList(new JedisShardInfo[]{info}));
        ShardedJedis jedis = pool.getResource();

        Throwable var6 = null;

        try {
            jedis.get("test-connection");
        } catch (Throwable var15) {
            var6 = var15;
            throw var15;
        } finally {

            if (var6 != null) {
                try {
                    jedis.close();
                } catch (Throwable var14) {
                    var6.addSuppressed(var14);
                }
            } else {
                jedis.close();
            }


        }

        return pool;
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy