簡體   English   中英

如何在Grails中設置服務方法緩存

[英]How to setup service method caching in grails

我的應用程序有幾個服務,它們可以通過httpClient(GET和POST)進行外部調用,這些服務幾個月之內不會發生變化,但是速度很慢。 使我的應用程序變得更慢。 澄清:這不是關於將GORM /休眠/查詢緩存到我的數據庫中。

如何在grails 2.1.0中緩存這些方法(磁盤上的持久性獲得獎勵積分...)?

我已經安裝了grails-cache-plugin,但是它似乎沒有用,或者我配置錯了(很難做,因為只添加了2-5行,但是我過去已經做到了)

我還嘗試在應用程序前面設置nginx代理緩存,但是當我提交其中一個表單進行了微小的更改時,我得到的是第一個提交的結果。

任何建議/想法將不勝感激。

編輯 :當前解決方案(基於Marcin的答案)

我的config.groovy :(僅緩存部分)

//caching
grails.cache.enabled = true
grails.cache.clearAtStartup = false

grails.cache.config = {
    defaults {
        timeToIdleSeconds 3600
        timeToLiveSeconds 2629740
        maxElementsInMemory 1
        eternal false
        overflowToDisk true
        memoryStoreEvictionPolicy 'LRU'
    }

    diskStore {
        path 'cache'
    }

    cache {
        name 'scoring'
    }
    cache {
        name 'query'
    }
}

重要的部分是:

  • 在啟動時不清除(grails.cache.clearAtStartup = false)
  • overflowToDisk = true可將所有結果持久保存在maxElementsInMemory上
  • maxElementsInMemory = 1減少了內存中的元素數量
  • 運行應用程序的用戶應可寫“ diskStore”。

Grails緩存插件在Grails 2.3.11下對我來說效果很好。 文檔非常整潔,但是只是為了向您展示草案...

我在Config.groovy使用以下設置:

grails.cache.enabled = true
grails.cache.clearAtStartup = true

grails.cache.config = {
    defaults {
        maxElementsInMemory 10000
        overflowToDisk false
        maxElementsOnDisk 0
        eternal true
        timeToLiveSeconds 0
    }
    cache {
        name 'somecache'
    }
}

然后,在服務中,我使用類似以下內容:

@Cacheable(value = 'somecache', key = '#p0.id.toString().concat(#p1)')
def serviceMethod(Domain d, String s) {
    // ...
}

注意somecache部分已被重用。 同樣,在我的情況下,使用String作為鍵也很重要。 這就是為什么我在id上使用toString()的原因。

還可以將插件設置為使用磁盤存儲,但我不使用它。

如果沒有幫助,請提供有關您的問題的更多詳細信息。

這可能無濟於事,但是如果將應用程序升級到Grails 2.4.x,則可以使用@Memoize批注。 這將根據傳遞給它的參數自動緩存每個方法調用的結果。

為了存儲“幾乎靜態”的信息,您可以使用Memcached或Redis作為緩存系統。 (還有很多)

這兩個緩存系統允許您存儲鍵值數據(在您的情況下,類似於“ key_GET”:JSON,XML,MAP,String)。

這是一篇相關的文章: Memcached與Redis?

問候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM