【问题标题】:JedisConnectionFactory setHostName is deprecatedJedisConnectionFactory setHostName 已弃用
【发布时间】: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 的弹簧数据”示例?

【问题讨论】:

    标签: redis spring-data jedis


    【解决方案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()

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2014-02-12
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多