Среда mnet: aix 7.1 Redis 2.6.17 jdk 1.6 Spring-data-commons-1.12.11.RELEASE весна-данные-ключ-значение-1.1.11.RELEASE Весна-данные-Redis-1.7.11 салат-латук-3.5.0.Финал Сервер Redis, работающий на одном хосте с веб-приложениями (клиентами Redis)
Проблема: Я установил следующую конфигурацию RedisTemplate Bean:
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.sethashKeySerializer(new StringRedisSerializer);
return redisTemplate;
}
, а также следующий код программы проверки для сервера Redis:
public class ObservableRedisStateChecker implements Runnable {
...
public void run() {
try {
Thread.sleep(3000);
redisTemplate.opfForValue().get("validation");
notifyObservers(true);
} catch (Exception e) {
noifyObservers(false); // meaning that the Redis' state isn't fine.
}
...
}
Вышеупомянутый ObservableRedisStateChecker периодически проверяет и уведомляет другие экземпляры - состояние сервера Redis. Код обычно работает нормально, но когда делается слишком много запросов, возникает следующая ошибка:
org.springframework.data.redis.serializer.SerializationException:
Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException:
Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?;
nested exception is java.io.EOFException
Странный момент заключается в том, что когда я запускаю простое тестовое приложение, которое запускает тот же код с указанной выше проверкой код на том же хосте возникает ошибка, в то время как ошибка возникает, тестовое приложение сообщает об отсутствии ошибки. ошибка возникла только в веб-приложениях. Код теста следующий:
...
ExecutorService es = Executors.newCachedThreadPool()
RedisTemplate<String, Obejct> redisTemplate = ...
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
...
Что с ним не так?