
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