Я делаю будущую операцию джедаев (hgetall) через будущее.Когда время ожидания при вызове метода get
истекает, я отменяю будущее.Операция redis все еще продолжается.Он не прерывается.
Future<Map<String,String>> future = executorService.submit(() -> {
long startTime = Instant.now.toEpochMilli();
Map cachedata = jedis.hgetall(primarykey);
log.info("Total time for hgetall operation {}", Instant.now.toEpochMilli() - startTime);
});
try {
future.get(2000, TimeUnit.MILLISECONDS);
} catch (TimeoutException e ) {
log.warn("jedis operation timeout");
//set interrupt flag to true
future.cancel(true);
} //other checked exception handling
Когда кластер redis работает медленно из-за большой нагрузки, он начинает дольше обрабатывать запросы.Когда это происходит, значение future
выше истекает через 2 с.С cancel
флаг прерывания потока должен быть установлен на true
.После этого я ожидаю, что операция джедаев остановится и будет соблюдать флаг прерывания.Но задача продолжается и в итоге выводит строку журнала «Общее время для операции hgetall 6000». Это означает, что задача выполнялась в фоновом режиме в течение 4 секунд после установки флага прерывания.
Я использую jedis в режиме кластера и получаюсоединение из пула соединений. Версия Java - 8.