У меня есть простое приложение Grails, которое нужно периодически делать для внешнего веб-сервиса во время сеанса пользователя (при использовании интерфейса).
Я хотел бы кэшировать этот ответ веб-службы, но результаты службы меняются примерно каждые несколько дней, поэтому я хотел бы кэшировать его на короткое время (возможно, ежедневно обновляется).
Плагин кэширования Grails, похоже, не поддерживает реализацию "времени для жизни", поэтому я изучал несколько возможных решений. Я хотел бы знать, какой плагин или программное решение лучше всего решить эту проблему.
Пример:
BuildConfig.groovy
plugins{
compile ':cache:1.0.0'
}
MyController.groovy
def getItems(){
def items = MyService.getItems()
[items: items]
}
MyService.groovy
@Cacheable("itemsCache")
class MyService {
def getItems() {
def results
//expensive external web service call
return results
}
}
UPDATE
Было много хороших вариантов. Я решил пойти с подходом к плагину, который предложил Берт. Я включил пример ответа с незначительными изменениями в приведенный выше пример кода, чтобы помочь другим, желающим сделать что-то подобное. Эта конфигурация завершает кеш через 24 часа.
BuildConfig.groovy
plugins{
compile ':cache:1.1.7'
compile ':cache-ehcache:1.0.1'
}
Config.groovy
grails.cache.config = {
defaultCache {
maxElementsInMemory 10000
eternal false
timeToIdleSeconds 86400
timeToLiveSeconds 86400
overflowToDisk false
maxElementsOnDisk 0
diskPersistent false
diskExpiryThreadIntervalSeconds 120
memoryStoreEvictionPolicy 'LRU'
}
}