Установка TTL / Record Expiry в hazelcast для всех записей на основе поля записей - PullRequest
0 голосов
/ 20 мая 2019

Мы пытаемся настроить срок действия для каждой записи на нашей карте. У каждого объекта есть поле long expireDate, в котором указано время в миллисекундах, когда мы хотим, чтобы объект был удален.

Можем ли мы реализовать некоторую политику для удаления записей на основе значения этого поля для каждой записи?

Посмотрел этот вопрос, но это на вход через пут. Настройка TTL / истечения записи в Hazelcast

IMap::put(Key, Value, TTL, TimeUnit)

Проблема в том, что 95% наших записей размещаются там с использованием метода putAll, и, следовательно, это не может быть предоставлено таким способом.

1 Ответ

2 голосов
/ 20 мая 2019

Метод IMap.setTTL (), доступный в IMDG 3.11 и более поздних версиях, позволяет вам устанавливать индивидуальные значения TTL для записей на карте. Я думаю, что решением здесь было бы написать небольшую процедуру, которая считывает значение expireDate записи, вычисляет смещение из текущего системного времени и устанавливает TTL для записи карты в это смещение.

Эту процедуру затем можно выполнить как EntryProcessor (возможно, сразу после операции putAll с использованием того же набора ключей), или как MapListener, который будет запускаться при добавлении записи (или обновлении, если обновления иногда изменяются). значение expireData).

...