当前位置: 首页 > 知识库问答 >
问题:

Redis连接池使用spring-data-redis配置但工作不正常

云鸿达
2023-03-14

我正在使用的内容:
spring-data-redis.1.7.0.release
lettuce.3.5.0.final

我对与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也是客户端)

然而,我的应用程序的日志显示它总是通过同一个端口发送操作请求。所以我使用“client list”命令检查客户端状态,它显示有客户端的池数,并且只有端口正在发送请求。

共有1个答案

阴鸿才
2023-03-14

这是由生菜的特殊特性“共享本机连接”造成的。

spring-data-redis中的LettuceConnectionFactory有一个名为setShareNativeConnection(boolean)的setter方法,默认设置为true。这意味着无论创建和池化多少个连接,只要调用非阻塞和非事务性操作,就只使用一个本机连接。

正如您所看到的,我没有手动设置值,所以它被设置为默认值“true”,并且没有阻塞或事务性操作。

此外,将默认值设置为true的原因是Redis本身是单线程的,这意味着即使客户端同时发送许多操作,Redis也必须逐个执行它们,因此将该值设置为“false”并不意味着它增加了Redis的吞吐量。

 类似资料:
  • 我想监控并定期记录有关Redis连接池使用情况的信息。 我通过spring-data-redis RedisTemboard对象使用Redis。 有办法进入游泳池吗?

  • 当我将enableTransactionSupport设置为true时,连接不会返回到池。即使事务方法已经完成,连接也会绑定到线程,这是一个大问题,如何解决?我使用spring数据redis 2.7.2和jedis 2.8.1 连接没有释放到redis池,如果我没有使用enableTransactionSupport,这是可以的。但它不支持Spring的Transactional。如何解决?

  • 我正在开发一个带有的Spring Boot[web]REST风格的应用程序(因为它需要部署到现有的Tomcat服务器)。它有一个,其方法在调用时需要写入Redis。我让Redis服务器在localhost上运行(默认端口,没有密码)。POM文件的相关部分具有所需的启动器依赖关系: 当我部署战争并到达终点时,我得到这样的回应: 我在Spring Boot应用程序类中添加了以下内容: 在执行一些测试R

  • 问题内容: 使用Lettuce,我们如何配置运行在主机x上的6379端口上的Spring Data Redis和运行在相同或不同主机上的6380端口上的slave? 问题答案: 该功能将包含在即将发布的Spring Data Redis 2.1版本中。您将配置类似于: Lettuce从静态(不由Redis Sentinel管理)设置中自动发现主服务器和从服务器。

  • 问题内容: 我正在满足以下要求的应用程序(Spring): 从Redis Server1读取数据 从Redis Server2读取数据 从Redis Server3读取数据 和 将信息保存到MySQL。 有人可以给我们一个思路,使用Spring Data Redis连接到不同的Redis服务器。 获得了链接:http : //forum.spring.io/forum/spring- projec