У меня есть кластер Hazelcast, который состоит из 4 узлов. Настройки выглядят так:
<hazelcast>
...
<map name="default">
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<eviction-policy>LRU</eviction-policy>
<max-size policy="cluster_wide_map_size">5000</max-size>
</map>
</hazelcast>
Наиболее важной частью является синхронное резервное копирование .
Я использую hazelcast iMap , например:
IMap<String, Object> map = getClient().getMap("default");
map.putAsync("key1", "1").get(1000, TimeUnit.MILLISECONDS);
//
String firstGet = map.getAsync("key1").get(1000, TimeUnit.MILLISECONDS);
map.putAsync("key1", firstGet + "2").get(1000, TimeUnit.MILLISECONDS);
//
String secondGet = map.getAsync("key1").get(1000, TimeUnit.MILLISECONDS);
map.putAsync("key1", secondGet + "3").get(1000, TimeUnit.MILLISECONDS);
//
String thirdGet = map.getAsync("key1").get(1000, TimeUnit.MILLISECONDS);
Я ожидаю, что thirdGet равно "123" . Но я получаю "13" очень редко. Похоже, что мое второе обновление в некоторых случаях теряется. Но я не вижу ошибок в логах.
Важно, чтобы эта ошибка появлялась, когда система имеет максимальное количество запросов.
Я думал о выселении кеша. Но в этом случае я бы потерял весь ключ. Но я потерял только второе обновление моего товара.
Также я знаю, что Hazelcast является продуктом AP. Но у меня синхронная репликация.