Kullanıcı oturumunda (arayüz kullanırken) bir defaya mahsus bir web servisine periyodik olarak çağrı yapması gereken basit bir Grails uygulamasına sahibim.Pahalı web servis çağrısını önbelleğe almak için en iyi strateji Grails
Bu web hizmeti yanıtını önbelleğe almak istiyorum, ancak hizmetin sonuçları birkaç günde bir değişiyor, bu yüzden kısa bir süre için önbelleğe almak istiyorum (belki günlük yenilemeler).
Grails önbellek eklentisi, "yaşama süresi" uygulamalarını destekliyor görünmüyor, bu yüzden birkaç olası çözümü araştırıyorum. Bu sorunu en çok hangi eklenti veya program çözümünün çözeceğini bilmek isterim.
Örnek:
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
}
}
GÜNCELLEME
çok iyi seçenek vardı. Burt'un önerdiği eklenti yaklaşımıyla gitmeye karar verdim. Başkalarının benzer bir şey yapmak istemesine yardımcı olmak için yukarıdaki kod örneğinde küçük değişikliklerle örnek bir yanıt verdim. Bu yapılandırma, önbelleğin 24 saat sonra sona ermektedir.
BuildConfig.groovy
plugins{
compile ':cache:1.1.7'
compile ':cache-ehcache:1.0.1'
}
Config.groovygrails-cache birim testler (timeToLiveSeconds arayın), sana önbellek düzeyinde önbelleğe yapılandırabilirsiniz görüyoruz itibaren
grails.cache.config = {
defaultCache {
maxElementsInMemory 10000
eternal false
timeToIdleSeconds 86400
timeToLiveSeconds 86400
overflowToDisk false
maxElementsOnDisk 0
diskPersistent false
diskExpiryThreadIntervalSeconds 120
memoryStoreEvictionPolicy 'LRU'
}
}
En son önbellek eklentisini kullanarak, şu süreyi dolduramazsınız: "Bu eklenti ile" yaşam süresini "yapılandırmanın bir yolu olmadığından, önbelleğe alınan tüm öğelerin zaman aşımı yoktur ve JVM yeniden başlatılıncaya kadar önbelleğe alınır. yedekleme deposu bellek içidir) veya önbellek kısmen veya tamamen temizlenir (@CacheEvict veya program aracılığıyla eklenmiş bir yöntem veya eylem çağrılarak). " – Gregg
Bu, @CacheEvict kullanan bir web servisine ulaşan bir cron işine sahip olabileceğinizi söyledi. En azından bir çalışma. – Gregg
Evet, bu yaklaşımı düşündüm. Bunu bir adım daha ileriye taşımak için Quartz, her şeyi uygulama içinde tutmak için cronun yerini alabilir. Önbellek eklentisi, bahar önbellek eklentisi gibi daha fazla hareket etmesini isterdim. – arcdegree