是否有一些集合实现支持元素到期。
例如:
Collection<User> cachedUsers = new ExpirableList<User>(10000);
其中
public ExpirableList(final long timeout){...}
在给定时间(此特定示例中为10000ms
)之后,将从集合中删除添加的元素。通过使用此功能,我们可以防止溢出cachedUsers
集合。
答案 0 :(得分:9)
是的,Guava支持具有定时到期的缓存。请参阅Guava Explained's page on caches。
另一种选择是LRU(最近最少使用的)缓存,它在插入新元素时处理最旧的访问元素。
答案 1 :(得分:3)
你是如何尝试使用该系列并不是很清楚,但是番石榴的CacheBuilder
可能对你有所帮助。
答案 2 :(得分:2)
你可以通过编写一个包装器来实现这一点,例如,TreeMap
,你可以让插入时间成为关键。在每个插入中,您可以删除已经“超时”的头列表。
使用插入时间作为是否应该丢弃的指示似乎是一个坏主意。例如,最好使用一些LRU(最近最少使用的)缓存。例如,EHCache等库可以很容易地获得这样的高速缓存。 不要重新发明轮子。
相关问题:
答案 3 :(得分:2)
另一种选择是ExpiringMap:
Map<String, User> users = ExpiringMap.builder()
.expiration(10, TimeUnit.SECONDS)
.build();