我们将 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 。
为 AWS Elastic Cache 使用 DefaultLettucePool 是否是好的选择,使用 setShareNativeConnection 设置为 false 的缺点是什么。
拥有连接池的任何其他更好的选择。