我们正在使用带有lettuce的spring数据redis,lettuce使用单个连接,但是在Web应用程序中,根据我的假设,最好使用连接池。下面是java config的代码
@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数据redis 1.8.23和Lettuce 4.5.0.final,因此不能使用LettucePoolingClientConfiguration。
为AWS Elastic Cache使用DefaultLettucePool是否确实是很好的选择,将setShareNativeConnection设置为false的不利之处。
拥有连接池的任何其他更好的选择。
答案 0 :(得分:0)
是否将DefaultLettucePool用于AWS Elastic Cache是一个不错的选择
从功能的角度来看,它工作得很好,唯一的问题是它已被弃用,因此使用它会产生技术负担。
使用setShareNativeConnection设置为false有什么缺点
由于每次操作都会打开和关闭套接字,因此它将增加应用程序的网络I / O。保持为真可确保多个LettuceConnection对象可以重用本机连接。
作为替代方法,尝试使用Jedis作为引擎而不是生菜。使用该库,我的表现非常出色,它也支持连接池。