Spring Data REDIS с подключением JEDIS прекращается через несколько минут - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть веб-приложение Spring + Spring MVC в Eclipse (ОС WIN 10).

У меня есть следующие настройки mavenized:

<spring.version>5.1.2.RELEASE</spring.version>
<spring-data-redis.version>2.1.2.RELEASE</spring-data-redis.version>
<jedis.version>2.9.0</jedis.version>

Я создал функцию:

@Override
public Map<String, Double> find(final String set, final double min, final double max) {
    Set<Tuple> mostViewed = redisTemplate.execute(new RedisCallback<Set<Tuple>>() {
        @Override
        public Set<Tuple> doInRedis(RedisConnection con)
                throws DataAccessException {
            Set<Tuple> zRangeByScoreWithScore = con.zRangeByScoreWithScores(set.getBytes(), min, max);
            return zRangeByScoreWithScore;
        }
    }); 
    Map<String, Double> mScoreMap = new HashMap<String, Double>(); 
    for (Tuple t : mostViewed) {
        mScoreMap.put(new String(t.getValue()), t.getScore());
    }
    return mScoreMap;
}

Моя конфигурация JEDIS:

@Bean
public JedisPoolConfig jedisPoolConfig() {
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(10);
    jedisPoolConfig.setMaxIdle(5);
    jedisPoolConfig.setMinIdle(2);
    jedisPoolConfig.setTestOnBorrow(true);
    jedisPoolConfig.setTestOnReturn(true);
    jedisPoolConfig.setMaxWaitMillis(3000);
    jedisPoolConfig.setTimeBetweenEvictionRunsMillis(60000);
    return jedisPoolConfig;
}

@Bean
public JedisConnectionFactory jedisConnectionFactory() {

    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);

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

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

    return jedisConFactory;
}

@Bean
public StringRedisSerializer stringRedisSerializer() {
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    return stringRedisSerializer;
}

@Bean
RedisTemplate<String, String> redisTemplate() {
    final RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
    redisTemplate.setConnectionFactory(jedisConnectionFactory());
    redisTemplate.setDefaultSerializer(stringRedisSerializer());
    redisTemplate.setKeySerializer(stringRedisSerializer());
    redisTemplate.setHashKeySerializer(stringRedisSerializer());
    redisTemplate.setEnableTransactionSupport(true);
    return redisTemplate;
}

, но примерно через 1-2 минуты моё приложение зависает с этим сообщением в файле журнала (журнал Eclipse):

[http-nio-8080-exec-9] DEBUG o.s.d.r.core.RedisConnectionUtils - Opening RedisConnection

Журнал сервера redis (обновление приложения в веб-браузере не оказывает влияния, новых сообщений нет):

[984] 21 Nov 11:45:00.163 * 100 changes in 300 seconds. Saving...
[984] 21 Nov 11:45:00.170 * Background saving started by pid 13692
[984] 21 Nov 11:45:00.270 # fork operation complete
[984] 21 Nov 11:45:00.270 * Background saving terminated with success
[984] 21 Nov 12:30:00.162 * 100 changes in 300 seconds. Saving...
[984] 21 Nov 12:30:00.169 * Background saving started by pid 11976
[984] 21 Nov 12:30:00.269 # fork operation complete
[984] 21 Nov 12:30:00.271 * Background saving terminated with success

когда я останавливаю и запускаю сервер (Tomcat 8.0.41) в Eclipse, все в порядке для 1-2 минуты.Когда я останавливаюсь и запускаю сервер REDIS, ничего не происходит.

...