2016-08-29 62 views
4

Grails的版本工作:3.0.9控制器動作緩存不會出現使用Grails緩存插件

Groovy的版本:2.4.5

JVM版本:1.8.0_60

我使用的Grails緩存插件

http://grails-plugins.github.io/grails-cache/3.0.1/guide/index.html

而且我已經取得了一些成功的高速緩存服務的方法,如:

@Transactional 
class EventCategoryService { 

    @Cacheable('eventCategory') 
    def findAllSports() { 
     def sportCategories 
     log.info('called EventCategoryService.findAllSports') 
     sportCategories = EventCategory.findAllByParentCategoryName("Sport", [sort: "order"]) 
    } 
} 

一旦創建了緩存,就不會在預期的後續調用的日誌中看到'調用EventCategoryService.findAllSports'的日誌。

但是,插件在名爲「控制器操作緩存」的部分中聲明「您也可以使用相同的註釋來緩存對Web請求的響應」。

@Cacheable('eventCategory') 
def index(IndexCommand command) { 

    command.init() 

    log.info('called frontend:index') 

    render (view: "index", model: [command: command, distances: distances]) 
} 

不幸的是,每個呼叫我看到「叫前端:指數」出現在日誌和一些基本的時間確認,目前是在通話過程中的速度沒有增加。

我錯過了一個招數?我無法找到解決方案,所以任何幫助將不勝感激。

我會包含命令對象,如果這對緩存有任何影響?

class IndexCommand { 

    def searchService 
    def eventCategoryService 

    int max 
    int offset 
    String search 
    java.util.Date queryStartDate = new Date() 
    java.util.Date queryEndDate = new Date().plus(365) 
    def sportCategories 

    def results 

    def benchmark = { closure -> 
     def start = System.currentTimeMillis() 
     closure.call() 
     def now = System.currentTimeMillis() 
     now - start 
    } 

    def init() { 

     if (!max) max = 6 
     if (!offset) offset = 0 

     def duration = benchmark { 
      results = searchService.advancedSearchWithPagedResults(
        max, 
        offset, 
        search, 
        queryStartDate, 
        queryEndDate) 
     } 
     log.info("searchService.advancedSearchWithPagedResults took ${duration} ms") 

     duration = benchmark { 
      sportCategories = eventCategoryService.findAllSports() 
     } 
     log.info("EventCategory.findAllByParentCategoryName took ${duration} ms") 
    } 
} 

回答

1

你在你的動作傳遞IndexCommand命令所以每次你打電話的動作,你是路過IndexCommand不同的對象。值被緩存,但您必須傳遞相同的對象才能從緩存中獲取值。

因此,不是傳遞整個對象,而是傳遞對象的必需字段,並在該操作中創建對象。

希望這會有所幫助。

謝謝

+1

這很有道理,感謝您的幫助。我會試一試。 –

+0

我想你剛剛被自動分配了賞金。道歉,認爲我接受你的答案時已經這樣做了。再次感謝。 –