2009-09-19 149 views
1

緩存數據爲了最大限度地減少我需要某種形式的高速緩存來存儲數據對數據庫查詢的次數。我現在的做法是一個散列表(以字符串作爲鍵,整數作爲值)。但我希望能夠檢測數據庫中的更新並替換我的「緩存」中的值。我正在尋找的東西,使我的存儲對在預設的時間範圍內無效,大概10-15分鐘。我將如何實現?在我可以使用的標準Java包中有什麼東西?更新在哈希表中

回答

0

您可以使用現有的解決方案(見前面的回覆)

或者,如果你想一個挑戰,讓自己輕鬆緩存類(不推薦用於生產項目,但這是一個很好的學習經驗

你將需要至少3名成員

  1. 存儲爲散列表對象A的高速緩存數據,

  2. 下一高速緩衝存儲器期滿日期

  3. 緩存到期間隔通過構造方法設置。

然後,只需有公開數據的獲取方法,驗證緩存過期狀態:

  • 如果沒有過期,呼叫hastable的存取;

  • 如果期滿,第一呼叫「數據加載」方法,該方法也被稱爲在構造函數中預先填充,然後調用哈希表的存取。

對於甚至更冷的緩存類(我已經實現了它在Perl在我的工作),你可以有更多的功能,可以實現:

  • 單獨的每鍵緩存過期(加上總體緩存過期總數)

  • 自動,半自動和單次數據重新加載(例如,立即重新加載整個緩存;重新加載由某個預定義查詢定義的一批數據,或重新加載單個數據元素單件郵件) 。後一種方法是非常有用的,當你的緩存有完全相同的鑰匙許多命中 - 這樣你就不需要每次3個凱茨說總是訪問到期重裝宇宙。

+0

現在這將是一次學習經歷,但是當我需要一個真正的項目時,我會考慮Ehcahce和其他人。這一次規範並沒有要求這個特定的功能 - 這只是我想嘗試和做的事情(但從來沒有公開)。 – matpe 2009-09-20 06:13:50

4

我會使用一些現有的解決方案(有很多緩存框架)。 ehcache是偉大的,它可以重置給定的時間跨度值和我打賭它可以做更多的事情(我只使用了)

0

你可以使用一個緩存框架像OSCacheEHCacheJBoss CacheJCS ......如果你正在尋找的東西,遵循「標準」,選擇支持的JCache標準接口(使用javax的框架。緩存)又名JSR-107

對於簡單的需求,如你所描述的,我會看EHCache或OSCache(我不是說它們是基本的,但它們很容易入手),它們都支持基於時間的到期。

如果我不得不選擇一種解決方案,我會推薦Ehcache,它有我的偏好,特別是現在它已經加入了兵馬俑。而爲了記錄,Ehcache通過net.sf.cache.jcache package提供了JSR107的a preview implementation

+0

JSR-107規範是一個很好的閱讀。它真正處理我的問題。 – matpe 2009-09-20 07:04:57