ユーザーのセッション中 (インターフェイスの使用中) に、外部 Web サービスを定期的に数回呼び出す必要がある単純な Grails アプリケーションがあります。
この Web サービスの応答をキャッシュしたいのですが、サービスからの結果は数日ごとに変化するため、短時間 (おそらく毎日の更新) だけキャッシュしたいと考えています。
Grails キャッシュ プラグインは "time to live" 実装をサポートしていないようです。この問題を最もよく解決するプラグインまたはプログラム ソリューションを知りたいです。
例:
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
}
}
アップデート
多くの良い選択肢がありました。Burt が提案したプラグイン アプローチを採用することにしました。他の人が同様のことをしたいのを助けるために、上記のコード例に小さな変更を加えたサンプルの回答を含めました。この構成では、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'
}
}