Как настроить кеш Apache Ignite с несколькими политиками истечения срока действия

Например, я хотел бы настроить кеш со следующими двумя политиками истечения срока действия:

  • TouchedExpiryPolicy
  • CreatedExpiryPolicy

Пример кода приведен ниже (Apache Ignite версии 1.5.0.final):

public IgniteCache<String, Object> getOrCreateCache(String cacheName) {
    Ignite ignite = Ignition.ignite();

    CacheConfiguration<String, Object> cacheCfg = new CacheConfiguration<String, Object>(cacheName);
    cacheCfg.setExpiryPolicyFactory(TouchedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 10)));
    cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 30)));

    IgniteCache<String, Object> igniteCache = ignite.getOrCreateCache(cacheCfg);
    return igniteCache;     
}

Однако проблема в том, что вторая политика истечения срока действия заменит первую. Интересно, есть ли способ настроить кеш Ignite так, чтобы он соблюдал обе политики истечения срока действия? Спасибо.

Кстати, в EhCache я могу добиться того же, настроив кеш следующим образом:

<cache name="my-cache-name" ...
    timeToIdleSeconds="10" timeToLiveSeconds="30"
    ...>        
</cache>

Использованная литература:


person Yuci    schedule 19.05.2016    source источник
comment
Здравствуйте, удалось ли вам решить эту проблему, используя тот же кеш Ignite?   -  person Sarah Tammam    schedule 14.03.2021


Ответы (1)


Отвечая на общую политику JCache ExpiryPolicy, возможно, в Apache Ignite есть дополнительные параметры.

TouchedExpiryPolicy использует одинаковую продолжительность для создания и обновления.

Вы можете установить индивидуальное время, создав подкласс ExpiryPolicy.

Будьте осторожны с логическими выводами. Установка истечения 10 секунд после доступа и 30 секунд после создания означает, например:

  • Элемент создан, остается в кеше 30 секунд, если к нему нет доступа
  • Элемент создан, доступ к нему осуществляется через 5 секунд после создания, срок действия элемента истекает через 15 секунд после создания (через 10 секунд после доступа)

Наверное, вы хотите чего-то другого. Итак, ответ таков: смешивание TTL и TTI невозможно так, как это задумано.

person cruftex    schedule 20.05.2016
comment
В Ignite также можно установить только один ExpirePolicy глобально для каждого кеша. Так что все ваши предложения мне кажутся правильными. - person dmagda; 20.05.2016
comment
Целью смешивания TTL и TTI является истечение срока действия кеша всякий раз, когда выполняется какой-либо из критериев, независимо от того, какой из них первым. - person Yuci; 20.05.2016
comment
@Yuci, я понимаю, что вы пытаетесь сделать. Наверное, многие хотят смешать эти две концепции. Но это не так. Срок действия предмета истекает только один раз, а не два. Я открыл проблему для этого в трекере проблем JSR107, чтобы узнать больше об этом: github.com / jsr107 / jsr107spec / issues / 355. Возможно, в Ignite есть еще один способ добиться этого. - person cruftex; 20.05.2016
comment
Здравствуйте, есть новости по этой проблеме? - person Sarah Tammam; 15.03.2021