Java 绝地连接工厂超时

Java 绝地连接工厂超时,java,redis,jedis,Java,Redis,Jedis,有没有一种方法可以像我们为HttpRequestFactory所做的那样,在JedisConnFactory中配置读取超时?我已使用超时属性配置了JedisConnFactory,如下所示。它是否同时包括连接超时和读取超时 final JedisConnectionFactory redisConnectionFactory=new JedisConnectionFactory(); redisConnectionFactory.setHostName(redisHost); redisConn

有没有一种方法可以像我们为
HttpRequestFactory
所做的那样,在
JedisConnFactory
中配置读取超时?我已使用超时属性配置了
JedisConnFactory
,如下所示。它是否同时包括连接超时和读取超时

final JedisConnectionFactory redisConnectionFactory=new JedisConnectionFactory();
redisConnectionFactory.setHostName(redisHost);
redisConnectionFactory.setTimeout(10000);
redisConnectionFactory.setPort(端口);
redisConnectionFactory.setUsePool(true);
redisConnectionFactory.AfterPropertieSet();
@Bean(name=“redisCacheManager”)
public CacheManager CacheManager(最终再贴现模板再贴现模板){
最终RedisCacheManager=新的RedisCacheManager(redisTemplate());
manager.setDefaultExpiration(Long.parseLong(expiryInSecs));
退货经理;
}
@Bean(name=“redisTemplate”)
公共RedisTemplate RedisTemplate(){
最终RedisTemplate RedisTemplate=新RedisTemplate();
setConnectionFactory(redisConnectionFactory());
setKeySerializer(stringRedisSerializer());
setHashKeySerializer(stringRedisSerializer());
setValueSerializer(stringRedisSerializer());
setHashValueSerializer(stringRedisSerializer());
redisTemplate.AfterPropertieSet();
返回模板;
}
您可以使用。它有一个生成器,其中包含 分别具有连接超时和读取超时属性

JedisClientConfiguration clientConfiguration = JedisClientConfiguration.builder().readTimeout(readTimeout).
                connectTimeout(connectTimeout).build();

然后,您可以使用一个接受JedisClientConfiguration的构造函数。

从JedisConnectionFactory扩展并覆盖afterPropertiesSet方法,如下所示:

public class CustomJedisConnectionFactory extends JedisConnectionFactory {

    private int connectionTimeout;

    private int readTimeout;

    // override super class constructors if required.

    @Override
    public void afterPropertiesSet() {

        super.afterPropertiesSet();
        final JedisShardInfo jedisShardInfo = this.getShardInfo();

        if (Objects.nonNull(jedisShardInfo)) {

            jedisShardInfo.setConnectionTimeout(getConnectionTimeout());
            jedisShardInfo.setSoTimeout(getReadTimeout());
        }
    }
}
创建CustomJedisConnectionFactory的实例,并设置“connectionTimeout”和“readTimeout”字段


您使用的是springboot吗?下面的答案对您有帮助吗?谢谢,是的,它在切换到2.1.6.0版后工作正常。我们之前使用的是1.4.4.0版本。但现在,我无法使用RedisTemplate创建RedisCacheManager的实例。已使用.code更新问题。您不应编辑问题以完全更改上下文。已针对您的原始问题发布了解决方案。您已编辑问题以更改上下文。如果您有新的查询,您应该发布新问题或添加注释,而不是更改现有问题的上下文。您应该编辑当前问题以添加/编辑详细信息,而不更改原始问题陈述。如果我们使用部署在Amazon Elastic cache上的带Redis服务器的Jedis,是否需要设置这些属性
CustomJedisConnectionFactory factory = new CustomJedisConnectionFactory();
factory.setHostName(host);
factory.setPort(port);
factory.setConnectionTimeout(connectionTimeout);
factory.setReadTimeout(readTimeout);