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的吞吐量。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...