JedisConnectionFactory setHostName 已弃用

Posted

技术标签:

【中文标题】JedisConnectionFactory setHostName 已弃用【英文标题】:JedisConnectionFactory setHostName is deprecated 【发布时间】:2018-08-07 21:16:17 【问题描述】:

这将是我第一次将 Spring 连接到 Redis。 jedis连接工厂的文档:http://www.baeldung.com/spring-data-redis-tutorial

提供以下代码:

@Bean
JedisConnectionFactory jedisConnectionFactory() 
    JedisConnectionFactory jedisConFactory
            = new JedisConnectionFactory();

    jedisConFactory.setHostName("localhost");
    jedisConFactory.setPort(6379);
    return jedisConFactory;

看起来不错,但我的 IDE 告诉我 setHostName 和 setPort 方法已被弃用(即使我使用的是教程中的版本)。

我想知道是否有人有一个使用非弃用 API 调用的简单“获取连接到 redis 的弹簧数据”示例?

【问题讨论】:

【参考方案1】:

在 Spring Data Redis 2.0 中,这些方法已被弃用。 您现在需要使用 RedisStandaloneConfiguration 进行配置

参考:https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.html#setHostName-java.lang.String-

例子:

JedisConnectionFactory jedisConnectionFactory() 
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
    redisStandaloneConfiguration.setPassword(RedisPassword.of("yourRedisPasswordIfAny"));
    return new JedisConnectionFactory(redisStandaloneConfiguration);

【讨论】:

所以 application.properties spring configuration vars like spring.redis.passwordspring.redis.host 不起作用,你必须通过代码配置它们? @xref 一些应用程序可能同时有多个 redis 连接,因此必须以编程方式对其进行配置。【参考方案2】:
@Bean
    JedisConnectionFactory jedisConnectionFactory() 

        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName("localhost");
        redisStandaloneConfiguration.setPort(6379);
        redisStandaloneConfiguration.setDatabase(0);
        redisStandaloneConfiguration.setPassword(RedisPassword.of("password"));

        JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
        jedisClientConfiguration.connectTimeout(Duration.ofSeconds(60));// 60s connection timeout

        JedisConnectionFactory jedisConFactory = new JedisConnectionFactory(redisStandaloneConfiguration,
                jedisClientConfiguration.build());

        return jedisConFactory;
    

【讨论】:

你能发布关于jedisClientConfiguration的详细信息吗?【参考方案3】:

除了@Thang Le 的回复

您可以配置读取操作的超时时间,添加以下行:

jedisClientConfigurationBuilder.readTimeout(Duration.ofSeconds(1));

这是你使用时可以获得的值:

jedisConFactory.getTimeout()

【讨论】:

以上是关于JedisConnectionFactory setHostName 已弃用的主要内容,如果未能解决你的问题,请参考以下文章

如何基于 Spring Boot 框架配置 JedisConnectionFactory 的超时时间

如何将 JedisConnectionFactory 配置为使用 SSL,以免出现错误:“JedisDataException:ERR 未加密连接被禁止”?

redis与idea的连接用MAVEN实现

redis与idea的连接用MAVEN实现

redis与idea的连接用MAVEN实现

redis配置和yml,properties访问