我想使用ehcache不僅作爲一個緩存,而且作爲一個容器的髒對象,當對象被驅逐/過期時,我想刷新到我的數據庫。在正常處理期間,我使用密鑰在ehcache中查找。如果密鑰不存在,我從數據庫讀取數據並將其放入ehcache。該值實際上是一個複雜的對象,我修改。當ttl /空閒時間/溢出情況發生時,我看到CacheEventListener回調被調用。但是有一個很大的問題。 notifyElementExpired在從緩存中刪除鍵值後調用。所以有一個競爭條件。如果我執行將髒值刷新到notifyElementExpired中的緩存任務並同時在另一個線程中讀取相同的密鑰,則會出現同步問題。第二個線程將不會在ehcache中找到該對象,因此將轉到數據庫,而另一個線程仍在準備刷新。這個用例可以在ehcache中解決嗎?
我試着用寫通過ehcache試驗,我不認爲這也工作。
有沒有解決方法?
我真的很感謝這個問題的好解決方案,即使它涉及到一些其他的緩存機制而不是ehcache。
感謝
我自己找不到任何答案。所以我繼續自己解決它!這裏是我博客的解決方案 - http://blog.readypulse.com/2012/01/08/ehcache-as-a-true-persistent-store-backed-cache/ – 2012-01-08 21:53:20
好的作品TVinodGupta。作爲一個友好的提醒,你可以請你自己發表問題的答案,然後接受答案,以便我們可以關閉這個問題?另外,如果他們解決了您的問題,則需要接受以前問題的答案。 – Zecas 2012-05-28 14:22:31