com.yuweix.tripod.data.springboot.lettuce.LettuceClusterConf Maven / Gradle / Ivy
package com.yuweix.tripod.data.springboot.lettuce;
import com.yuweix.tripod.core.json.Json;
import com.yuweix.tripod.data.cache.redis.lettuce.LettuceCache;
import com.yuweix.tripod.data.serializer.JsonSerializer;
import com.yuweix.tripod.data.serializer.Serializer;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
import java.util.List;
/**
* redis集群
* @author yuwei
*/
public class LettuceClusterConf {
@Bean(name = "lettuceClientConfiguration")
public LettuceClientConfiguration clientConfiguration(@Value("${tripod.redis.pool.maxTotal:1024}") int maxTotal
, @Value("${tripod.redis.pool.maxIdle:100}") int maxIdle
, @Value("${tripod.redis.pool.minIdle:100}") int minIdle
, @Value("${tripod.redis.pool.maxWaitMillis:10000}") long maxWaitMillis
, @Value("${tripod.redis.pool.testOnBorrow:false}") boolean testOnBorrow
, @Value("${tripod.redis.timeoutMillis:5000}") long timeoutMillis) {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(maxTotal);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWaitMillis);
poolConfig.setTestOnBorrow(testOnBorrow);
LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(Duration.ofMillis(timeoutMillis))
.poolConfig(poolConfig)
.build();
return clientConfig;
}
@Bean(name = "redisClusterConfiguration")
public RedisClusterConfiguration redisClusterConfiguration(@Qualifier("redisNodeList") List redisNodeList
, @Value("${tripod.redis.cluster.timeout:300000}") int timeout
, @Value("${tripod.redis.cluster.maxRedirections:6}") int maxRedirections) {
RedisClusterConfiguration conf = new RedisClusterConfiguration(redisNodeList);
conf.setMaxRedirects(maxRedirections);
return conf;
}
@Bean(name = "lettuceConnectionFactory")
public LettuceConnectionFactory lettuceConnectionFactory(@Qualifier("lettuceClientConfiguration") LettuceClientConfiguration clientConfig
, @Qualifier("redisClusterConfiguration") RedisClusterConfiguration config) {
LettuceConnectionFactory connFactory = new LettuceConnectionFactory(config, clientConfig);
connFactory.setValidateConnection(true);
connFactory.setShareNativeConnection(false);
return connFactory;
}
@Bean(name = "redisTemplate")
public RedisTemplate redisTemplate(@Qualifier("lettuceConnectionFactory") LettuceConnectionFactory connFactory) {
RedisSerializer> redisSerializer = new StringRedisSerializer();
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(connFactory);
template.setKeySerializer(redisSerializer);
template.setValueSerializer(redisSerializer);
template.setEnableDefaultSerializer(true);
// template.setEnableTransactionSupport(true);
return template;
}
@ConditionalOnMissingBean(RedisMessageListenerContainer.class)
@Bean
public RedisMessageListenerContainer messageContainer(@Qualifier("lettuceConnectionFactory") LettuceConnectionFactory connFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connFactory);
return container;
}
@ConditionalOnMissingBean(Serializer.class)
@Bean
public Serializer cacheSerializer(Json json) {
return new JsonSerializer(json);
}
@ConditionalOnMissingBean(name = "redisCache")
@Bean(name = "redisCache")
public LettuceCache redisCache(@Qualifier("redisTemplate") RedisTemplate template
, Serializer serializer
, RedisMessageListenerContainer messageContainer) {
LettuceCache cache = new LettuceCache(template, serializer);
cache.setMessageContainer(messageContainer);
return cache;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy