我想在tomcat java web应用程序的集合中仅存储一些值。
场景是:
value1
value2
后1分钟添加value1
添加value3
后立即添加value2
value4
后2分钟添加value1
此值应仅在添加后的5分钟时间内可用。 5分钟后,他们应该从列表中删除。 无论上次访问时间如何,每个值都会在5分钟后(添加后)到期。
我已经开始使用ConcurrentHashMap
和ScheduledExecutor
来实现这一点。
我无法为此要求找到适当的内置缓存机制,如果使用缓存,如果更频繁地访问值,它将不会从列表中删除/过期。
如果有人可以给我指示或参考任何现有的实施,我感激不尽。
答案 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)
如果您想手动执行此操作,这是一个简单的想法:
HashMap
,覆盖get()
方法,以便进行检查
日期,如果日期太旧则返回null
,并返回存储的对象
否则。编辑:
如果内存有问题,您可以迭代地图以每X分钟删除过期的值。为此,在覆盖get()
方法中检查上次清理日期,如果超过X分钟,请立即进行清理。但如果你没有内存问题,你甚至可以跳过这个。
答案 3 :(得分:0)
如果您正在讨论存储每个客户端的值,可以使用cookie。