Kullanıcıların arama ölçütlerini ilk gireceği bir sitem var. Arama, bir veri tabanı olmayan 2 kaynaktan gelen verileri birleştirir. Arama sonuçları genellikle disk belleği için yeterince büyüktür.Gravürlerde veri önbellekleme
İlk sorgu pahalı olduğundan, arama kriterleri sonraki sayfa görünümleri için değişmezse, arama sonuçlarını önbelleğe almak istiyorum.
def search(criteriaMap, offset, pagesize)
harika/grails arama sonuçlarını önbelleğe en iyi yolu nedir:
Benim şu anki yöntem benziyor? Arama sonuçlarını nasıl sona erdirebilirim?
Not: Bir springcache eklentisi olduğunu görüyorum, ancak bunun paged sonuçları için işe yarayıp yaramayacağından emin değilim. Ayrıca, derelerin ehcache ile paketlendiğini biliyorum, ancak doğrudan erişebildiğim bir API görmedim, sadece GORM ile ikinci seviye önbellekleme için kullandığımı gördüm.
Güncelleştirme: Bu sorunu çözmek için @ mfloryan çözümünün bir kısmını aldım.
@Cacheable("searchCache")
def searchResults(uid, trimmedParams)
def trimParams(params)
(Bir önbelleğe ve diğer değildir.)
searchController My kod:
def trimmedParams = searchService.trimParams(params)
def results = searchService.searchResults(trimmedParams)
//Page results
results = HelperService.pageResults(results, params.offset, params.max)
[results: results, searchParams : trimmedParams]
Ben
searchService içinde iki yöntem yarattı
Sonuç olarak, arama servisini dahil olmayan kesilmiş bir parametre listesiyle çağırdım. ude çağrı paramları. Önbelleğe alınmış arama sonuçları iade edilebilir.
searchController çağrıyı hallediyor.
not: Hazırda bekletme sonuçlarını önbelleğe almadım çünkü önbellekteki verileri iki katına çıkarırdım. SearchService.searchResults (bir REST API'sini ve yerel veritabanımın ismini) birleştirilmiş sonuçları yalnızca önbelleğe aldım.
Sayfalandırma aracı nasıl etkileşime girer? Önbelleği zamana veya FIFO siparişine göre temizleyebilir miyim? – Tihom
Farklı bir sayfaya gitmek, sorgu dizesini değiştirir, böylece farklı yanıt önbelleğe alınır ve daha sonra sunulur. Önbellek otomatik olarak sona eriyor, bu nedenle zamana bağlı olarak açık bir şekilde temizlenmeye gerek yok. Sprigcache/caches/[cacheName]/timeToLive = ... – mfloryan
altında Config.groovy içinde ayarlayın. Farklı sayfalar için istekleri önlemek istiyorum. Bunu nasıl yaparım? – Tihom