【问题标题】:Is there a way to set a timeout in Java with Redis reactive?有没有办法使用 Redis 反应式在 Java 中设置超时?
【发布时间】:2020-01-19 16:05:09
【问题描述】:

我正在使用ReactiveRedisConnection 来配置与本地 redis 容器的连接。

但将来应用程序将托管在网络服务器上,而 redis 将托管在不同的服务器上。

是否有任何选项可以为请求设置超时?

【问题讨论】:

    标签: java spring-webflux spring-data-redis-reactive


    【解决方案1】:

    经过一些研究和测试,我发现必须在请求查询上设置超时。

    所以在配置类上:

    @Bean
    public ReactiveRedisTemplate<String, String> reactiveRedisTemplateString
    (ReactiveRedisConnectionFactory connectionFactory) {
        return new ReactiveRedisTemplate<>
                  (connectionFactory, RedisSerializationContext.string());
    }
    

    在服务中:

    @Autowired
    private ReactiveRedisTemplate<String, Response> repository;
    
    public Mono<String> execute(String value){
            return repository.opsForHash().entries("KEY_TO_SEARCH")
                    .timeout(Duration.ofMillis(TIMEOUT))
                    .collect(Collectors.toMap("CODE_HERE");
    

    编辑:感谢所有在这里提供帮助的人。

    【讨论】:

      【解决方案2】:

      可以在您的反应式连接实施中配置超时。如果您使用 Lettuce 进行 Redis 连接,您可以执行以下操作。

      @Bean
      public ReactiveRedisConnectionFactory reactiveRedisConnectionFactory() {
          return new LettuceConnectionFactory(new RedisStandaloneConfiguration(), LettuceClientConfiguration.builder().commandTimeout(Duration.ofSeconds(2)).build());
      }
      

      然后使用connectionFactory创建ReactiveRedisTemplate

      @Bean
      public ReactiveRedisTemplate<String, String> reactiveRedisTemplateString
        (ReactiveRedisConnectionFactory connectionFactory) {
          return new ReactiveRedisTemplate<>(connectionFactory, RedisSerializationContext.string());
      }
      

      【讨论】:

      • 无论我设置什么,都需要 10 秒。
      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 2019-10-21
      • 2019-10-14
      相关资源
      最近更新 更多