Настройка политик обновления в Ehcache - PullRequest
1 голос
/ 10 мая 2010

Можно ли указать политику обновления данных в Ehcache ? В настоящее время я перемещаю приложение из OSCache в Ehcache, и я не могу найти какой-либо способ указать, когда элемент нуждается в обновлении, кроме установки timeToIdle и timeToLive.

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

В OSCache это было сделано путем перехвата NeedsRefreshException s и установки пользовательских политик обновления для элементов. Некоторое время я копался в документах, но мне не удалось найти какие-либо методы или примеры того, как я мог бы сделать это в Ehcache.

Буду признателен за любую помощь:).

Alex

1 Ответ

1 голос
/ 10 мая 2010

Идея OSCache NeedsRefreshException действительно ошибочна. Во-первых, это противоречит совету использовать исключения для обычного потока выполнения (и да, я считаю устаревшее попадание в кэш обычным потоком); во-вторых, создать исключение для этого действительно дорого.

Теперь вернемся к вашему вопросу. Если бы я был на вашем месте, я бы оценил возможность либо расширить net.sf.ehcache.Element, либо заключить ваше значение входа в объект, который сможет проверить timeToLive.

Но главный вопрос в том, зачем вам это нужно? Если вы помещаете объект в кеш и указываете TTL, зачем беспокоиться о проверке TTL при получении? Кэш должен быть в состоянии выселить объект без какой-либо внешней помощи. То же самое относится к случаям, когда вы удаляете запись вручную (например, когда объект был изменен). Может я что-то здесь упускаю?

Функция, о которой вы спрашиваете, называется сквозной. Как это сделать, объясняется здесь: http://ehcache.org/documentation/concepts.html#read-through

-
еще один несчастный пользователь OSCache, ожидающий перехода на EHCache: (

...