如何在tomcat / java中仅存储一段时间的值

时间:2012-07-31 06:26:49

标签: java caching tomcat tomcat7

我想在tomcat java web应用程序的集合中仅存储一些值。

场景是:

    首先添加
  • value1
  • value2 后1分钟添加
  • value1 添加value3后立即添加
  • value2
  • 添加value4后2分钟添加
  • value1

此值应仅在添加后的5分钟时间内可用。 5分钟后,他们应该从列表中删除。 无论上次访问时间如何,每个值都会在5分钟后(添加后)到期。

我已经开始使用ConcurrentHashMapScheduledExecutor来实现这一点。

我无法为此要求找到适当的内置缓存机制,如果使用缓存,如果更频繁地访问值,它将不会从列表中删除/过期。

如果有人可以给我指示或参考任何现有的实施,我感激不尽。

4 个答案:

答案 0 :(得分: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");

答案 1 :(得分:1)

java.util。*。

没有提供这样的集合

一种选择是番石榴的Cache。可以通过CacheBuilder创建实例。在你的情况下,最有趣的方法是expireAfterWrite

答案 2 :(得分:1)

如果您想手动执行此操作,这是一个简单的想法:

  1. 使用日期创建一个包装您要存储的类型的类。
  2. 扩展HashMap,覆盖get()方法,以便进行检查     日期,如果日期太旧则返回null,并返回存储的对象     否则。
  3. 编辑:

    如果内存有问题,您可以迭代地图以每X分钟删除过期的值。为此,在覆盖get()方法中检查上次清理日期,如果超过X分钟,请立即进行清理。但如果你没有内存问题,你甚至可以跳过这个。

答案 3 :(得分:0)

如果您正在讨论存储每个客户端的值,可以使用cookie。