2012-07-31 63 views
0

我想在tomcat java web應用程序中的某個集合中僅存儲特定時間段的某些值。如何在tomcat/java中僅存儲特定時期的值

的方案是:

  • value1加入第一
  • value2加入1分鐘後value1
  • value3加入value2加入
  • value4剛過後value1是加入2分鐘新增

這些值只能在添加後5分鐘內提供。 5分鐘後,他們應該從名單中刪除。 無論上次訪問時間爲5分鐘(每次添加後),每個值都會過期。

我已經開始使用ConcurrentHashMapScheduledExecutor來實現這個功能。

我找不到適合此需求的正確內置緩存機制,並且如果使用緩存,如果更頻繁地訪問值,則不會從列表中刪除/失效值。

我很感謝有人能給我一個方向或引用任何現有的實現。

回答

1

是一個簡單的想法:

  1. 創建一個包裝要與一個存儲類型的類日期。
  2. 擴展HashMap,重寫get()方法,以便它檢查 日期,返回null如果日期太舊,並返回該對象存儲 否則。

編輯:

如果記憶是一個問題,你可以遍歷地圖上刪除過期值每隔X分鐘。爲此,在覆蓋get()方法檢查最後清理日期,如果它是超過X分鐘前現在做清理。但是如果你沒有記憶問題,你甚至可以跳過這個。

+0

清理策略如何? – 2012-07-31 08:11:16

+0

我編輯了我的答案。 – kgautron 2012-07-31 09:27:57

1

java.util。*中沒有這樣的集合。

一種選擇是番石榴的Cache。實例可以通過CacheBuilder創建。在你的情況下,最有趣的方法是expireAfterWrite

0

如果您正在討論存儲每個客戶端的值,可以使用cookie。

+0

不需要。該要求位於服務器端。 – 2012-07-31 07:58:40

3

google guava如果你想手動在這裏做可以做到這一點(很簡單)

com.google.common.cache.Cache<Integer, String> values = CacheBuilder.newBuilder().concurrencyLevel(4).expireAfterWrite(5, TimeUnit.MINUTES).maximumSize(20).build();   

values.put(someKey, "string val");