2012-05-17 69 views
1

我爲我的緩存層使用了Spring + Ehcache。 (via proxy)Spring + Ehcache:如何緩存查找所有結果

我想知道你是否可以在同一個緩存中同時緩存「f​​indAll」結果和「findById」結果,然後CacheEvict具體項目和「findAll」結果(保持項目的其餘部分不變)並在更新並再次「findById」時將其加載回緩存?

(或另一種方式是保持的findAll和findById在二級高速緩存,當更新CacheEvict allEntries爲的findAll緩存和緩存findById特定項目)

這可能嗎?

回答

2

我將解釋如何使用第二級和查詢緩存爲您提供一個總體思路。首先休眠緩存所有單個實體(例如,通過findById類型的操作檢索)在所謂的二級緩存中。

如果您檢索使用findAll它把主鍵查詢緩存中的所有實體(下一個鍵),在二級緩存中的所有具體的實體的所有實體和。再次調用findAll時,它首先從查詢緩存中檢索所有主鍵,然後從第二級緩存(或從數據庫)檢索所有實體。

失效相當簡單:INSERTDELETE操作應該使整個findAll查詢緩存無效,而UPDATE是透明的。

這應該引導您如何在解決方案中實現這一點。這在Spring中是可能的,但是您可能需要編寫一些代碼,特別是從查詢緩存到二級緩存的部分映射。

+0

我不使用休眠,所以我想沒有簡單的解決方案,我的問題。所以我想我只會在INSERT/DELETE時使所有緩存失效,並且只緩存所有的條目。 (用於我的參考數據)並緩存單個數據(針對實際的域對象)。謝謝! –