我有一个最大大小为5000的对象的列表。当对象没有更新特定类型的时间,如5秒、10秒或100秒时,它将从列表中删除。
处理这种情况的最佳或优先选择是什么?
你有什么建议吗?
发布于 2015-08-17 17:20:09
例如,您可以为每种类型的对象拥有一个缓存:
LoadingCache<String, ObjectOfType1> type1Cache = CacheBuilder.newBuilder()
.maximumSize(5000)
.expireAfterWrite(5, TimeUnit.SECONDS)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<String, ObjectOfType1>() {
public Graph load(String key) throws AnyException {
return createExpensiveGraph(key);
}
});对于Type2
LoadingCache<String, ObjectOfType2> type2Cache = CacheBuilder.newBuilder()
.maximumSize(5000)
.expireAfterWrite(10, TimeUnit.SECONDS)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<String, ObjectOfType2>() {
public Graph load(String key) throws AnyException {
return createExpensiveGraph(key);
}
});然后,您可以像使用Map一样使用缓存。
ObjectOfType1 o1 = type1Cache.get("1");
ObjectOfType2 o2 = type2Cache.get("2");发布于 2015-08-17 16:31:51
实际上,我使用的是一个实现,它使用Map<Object, Long>来存储每个元素的过期时间,使用一个java.util.Timer来每n秒钟运行一次,删除每个过期的元素。
我不能说它是最好的实现,因为我只对几百个简单的元素(即不是复杂的对象)使用它。
https://stackoverflow.com/questions/32054908
复制相似问题