Расчет асинхронного значения в распределенном кэше Hazelcast - PullRequest
0 голосов
/ 06 марта 2019

Текущая настройка

У меня есть два экземпляра приложения, работающего на двух разных машинах. Оба узла приложения используют общую конфигурацию Hazelcast для распределенного кэша. Кеш отлично работает с обычным IMap<String, SomeSerializableValue>.

Проблема

Теперь у меня есть случай, когда вычисление для кэшируемого значения является медленным и дорогостоящим. Я хочу убедиться, что значение для данного ключа рассчитывается только на одном узле приложения. Если другой узел извлекает значение для ключа, но вычисление все еще выполняется, этот узел должен дождаться завершения вычисления.

Идеальным решением было бы что-то вроде этого:

IMap<String, CompletableFuture<SomeSerializableValue>>

но этот подход явно не работает, потому что CompletableFuture не сериализуем.

Вопрос

Есть ли альтернативное решение в Hazelcast, которое может удовлетворить мои требования?

Например, у кофеина есть концепция AsyncLoadingCache . Тем не менее, он не распространяется. Может ли Hazelcast кешировать асинхронно рассчитанные значения?

1 Ответ

1 голос
/ 06 марта 2019

Будет ли выгружаемый процессор ввода работать?

Это позволяет вам применить "длительное" обновление к Map.Entry.Value в боковой ветке.

Во время выполнения обновления вызовы чтения возвращают существующее значение. Только после завершения вычисления обновления запись становится видимой.

...