我们将 spring data redis 与 lettuce 一起使用,lettuce 使用单个连接,但在 Web 应用程序中,根据我的假设,最好使用连接池。下面是java配置代码
@Configuration
@ComponentScan(basePackages = { "com.test.*" })
public class AppConfig {
@Bean
public LettuceConnectionFactory getLettuceConnectionFactory() {
List<String> clusterNodes = Arrays.asList("redis-cluster----0001-001.redis-cluster---.usw2.cache.amazonaws.com:6379", "redis-cluster----0001-002.redis-cluster---.usw2.cache.amazonaws.com:6379");
final LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(new RedisClusterConfiguration(clusterNodes));
lettuceConnectionFactory.setTimeout(10000);
lettuceConnectionFactory.setUseSsl(true);
lettuceConnectionFactory.setVerifyPeer(false);
lettuceConnectionFactory.setStartTls(false);
lettuceConnectionFactory.afterPropertiesSet();
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(getLettuceConnectionFactory());
return redisTemplate;
}
}
由于我们使用的是 Spring data redis 1.8.23 和 Lettuce 4.5.0.final,因此我们无法使用 LettucePoolingClientConfiguration 。
使用 DefaultLettucePool for AWS Elastic Cache 是否是一个好的选择,使用 setShareNativeConnection 设置为 false 的缺点是什么。
任何其他更好的连接池选择。
最佳答案
Does making use of DefaultLettucePool for AWS Elastic Cache is good option
从功能角度来看,它工作得很好,唯一的问题是它已被弃用,因此使用它会产生技术债务。
what is disadvantage of setting using setShareNativeConnection to false
它将增加应用程序的网络 I/O,因为每个操作都会打开和关闭套接字。保持它为 true 可确保多个 LettuceConnection 对象可以重用 native 连接。
作为替代方案,请尝试使用 Jedis作为你的引擎而不是生菜。我使用这个库获得了一些出色的性能,并且它也支持连接池。
关于redis - Spring data Redis集群Lettuce连接设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62939334/