2012-07-31 22 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"); 
相关问题