如何解决Redis连接池使用spring-data-redis配置但无法正常工作
我正在使用什么:
spring-data-redis.1.7.0.RELEASE
生菜.3.5.0。最后
我对与Redis相关的Spring bean进行了如下配置:
@Bean
public LettucePool lettucePool() {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMasIdle(10);
poolConfig.setMinIdle(8);
... // setting others..
return new DefaultLettucePool(host,port,poolConfig)
}
@Bean
public RedisConnectionFactory redisConnectionFactory() {
new LettuceConnectionFactory(lettucePool());
}
@Bean
public RedisTemplate<String,Object> redisTemplate() {
RedisTemplate<Stirng,Object> redisTemplate = new RedisTemplate<String,Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setEnableTransactionSupport(true);
... // setting serializers..
return redisTemplate;
}
redisTemplate Bean是自动装配的,用于Redis操作。
当我通过redis-cli使用“ info”命令进行检查时,连接看起来正确建立。客户端计数与设置为lettucePool Bean +1的值完全相同(redis-cli也是客户端)
但是,我的应用程序的日志说它总是通过同一端口发送操作请求。因此,我使用“客户端列表”命令检查了客户端状态,它说有客户端池的数量,只是端口正在发送请求。
我想念什么?
解决方法
这是由莴苣的特定功能“共享本地连接”引起的。
spring-data-redis中的LettuceConnectionFactory有一个名为setShareNativeConnection(boolean)的setter方法,默认情况下设置为true。这意味着无论创建和合并多少个连接,只要调用非阻塞和非事务操作,就仅使用一个本机连接。
如您所见,我没有手动设置该值,因此将其设置为默认值“ true”,并且没有阻塞或事务操作。
此外,将默认值设置为true的原因是Redis本身是单线程的,这意味着即使客户端同时发送许多操作,Redis也必须一次执行一次,因此请将此值设置为“ false”并不意味着它会增加Redis的吞吐量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。