У меня есть следующий вариант использования, где мне нужно удалить запись из IMap
, независимо от того, сколько раз она обновляется. Мой ключ - это строка, а мое значение - объект Java.
Если, например, запись добавлена 12 мая, ее необходимо удалить через 14 дней, т.е. 26 мая, независимо от того, сколько раз она обновляется.
Hazelcast имеет в своей конфигурации тег под названием время жизни, в котором вы можете указать, сколько времени запись может оставаться на карте.
Итак, из документации Hazelcast,
"Максимальное время в секундах для каждой записи, чтобы остаться на карте. Если это не 0, записи, которые старше, чем это время и не обновлены в течение этого времени, автоматически удаляются. Допустимые значения - целые числа от 0 до Integer.MAX. ЗНАЧЕНИЕ. Значение по умолчанию - 0, что означает бесконечность. Если оно не равно 0, записи исключаются независимо от установленной политики исключения. "
Таким образом, с учетом вышеизложенного, если вы рассмотрите приведенный выше пример, запись, добавленная первоначально 12 мая, а затем обновленная 24 мая, будет удалена через 14 дней после 24 мая, а не 26 мая.
Следовательно, для решения вышеуказанной проблемы я использую следующий подход. Когда мне нужно обновить запись, я сначала получаю EntryView с карты, а затем использую его, получая время истечения. Затем получить текущее время и взять разницу времени истечения с текущим временем, а затем обновить значение, указав время жизни как разницу времени истечения и текущего времени.
Employee employee= IMap.get("A12");
employee.setDescr("loasfdeff");
EntryView<String,Employee> entryView=iMap.getEntryView("A12");
Long expirationTime=entryView.getExpirationTime();
Long currentTime=System.currentTimeMillis();
Long difference=expirationTime-currentTime;
iMap.set("A12",employee, difference, TimeUnit.MILLISECONDS);
Я проверил вышеуказанный подход, и он работает. Хотя я хотел бы изучить другие альтернативы, чтобы посмотреть, есть ли что-нибудь, что hazelcast
предоставляет из коробки, чтобы помочь мне решить мой вариант использования.
Любая помощь очень ценится!
РЕДАКТИРОВАТЬ-
ВЫПУСК GITHUB- https://github.com/hazelcast/hazelcast/issues/13012