簡體   English   中英

EhCache Spring優化

[英]EhCache Spring optimization

我正在使用EhCache(2.10.1)和Spring(4.2.5)

我使用以下緩存配置了BookDao的方法:

@Cacheable(value = "bookByName", key = "#name")
public Book findByName(String name) {
    //find book by name in db 
}

@Cacheable(value = "bookById", key = "#id")
public Book findById(int id) {
    //find book by id in db
}

@Cacheable(value = "books", key = "??")
public List<Book> findAll() {
    //find books in db
}

首先,是否可以將findAll緩存與findById緩存或findByName緩存結合使用? 為此,我應該在key annotation parameter添加什么?

其次,如果我要更新或創建一本書,則需要在每個緩存上添加/退出這本書,並退出findAll方法的整個列表。 還有其他更好的方法嗎?

在概念上回答。 對於任何緩存以及Spring緩存批注或JSR107緩存批注,基本上都是相同的問題。

首先,是否可以將findAll緩存與findById緩存或findByName緩存結合使用? 為此,我應該在關鍵注釋參數中添加什么?

不,注釋無法實現。 除了清除緩存之外,您無法對批注執行批量操作。

一種可能性是使用命令式緩存接口檢索緩存中的所有條目,但是,這只是緩存中的書,而不是所有可用的書。 緩存並不知道所有可用的書,至少是如果它確實是緩存。

其次,如果我要更新或創建一本書,則需要在每個緩存上添加/退出這本書,並退出findAll方法的整個列表。 還有其他更好的方法嗎?

如果您有所有書籍的清單,那么需要什么緩存?

您可以返回列表中所有書籍的子集。 在這種情況下,參數可以是查詢。 列表的大小應該受到限制,這樣在處理和緩存它時不會耗盡內存。 理想情況下,您返回具有ID的List<Integer>或具有ID數組支持的List<Book>並從緩存中檢索書籍對象。

如果您希望能夠處理所有書籍,則使用Iterator<Integer> findAll()Iterator<Book> findAll()方法更為合適。 您不應該緩存它,因為:結果大小是無界的,只有在更頻繁地訪問一小部分數據時,緩存才有意義。

暫無
暫無

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

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