Настройка политик обновления в Ehcache
Можно ли указать политику обновления данных в Ehcache? В настоящее время я переносу приложение из OSCache в Ehcache, и я не могу найти какой-либо способ указать, когда элемент нуждается в обновлении, кроме настройки timeToIdle
а также timeToLive
,
То, что я хочу: при доступе к элементу из кэша, проверьте его связанный ресурс, чтобы увидеть, если он был обновлен позже, чем lastUpdateTime
элемента кеша. Если да, обновите кеш; остальное подать контент из кеша.
В OSCache это было сделано путем ловли NeedsRefreshException
s и настройка пользовательских политик обновления для элементов. Некоторое время я копался в документах, но я не смог найти никаких методов или примеров того, как я мог бы сделать это в Ehcache.
Любая помощь будет оценена:).
Alex
1 ответ
Идея OSCache о NeedsRefreshException
действительно ущербный. Во-первых, это противоречит совету использовать исключения для обычного потока выполнения (и да, я считаю устаревшее попадание в кэш обычным потоком); во-вторых, создать исключение для этого действительно дорого.
Теперь вернемся к вашему вопросу. Если бы я был на вашем месте, я бы оценил возможность продления net.sf.ehcache.Element
или оберните ваше входное значение в объект, который сможет проверить timeToLive
,
Но главный вопрос в том, зачем вам это нужно? Если вы помещаете объект в кэш и указываете TTL, зачем беспокоиться о проверке TTL при получении? Кэш должен быть в состоянии выселить объект без какой-либо внешней помощи. То же самое относится к случаям, когда вы удаляете запись вручную (например, когда объект был изменен). Может я что-то здесь упускаю?
Функция, о которой вы спрашиваете, называется сквозной. Как это сделать, объясняется здесь: http://ehcache.org/documentation/concepts.html
-
еще один несчастный пользователь OSCache, ожидающий перехода на EHCache:(