这是我使用MapMaker的一种方式的快速示例:
private final ConcurrentMap fooCache = new MapMaker()
.softValues()
.makeComputingMap(new Function() {
public Foo apply(Long id) {
return getFooFromServer(id);
}
});
public Foo getFoo(Long id) {
return fooCache.get(id);
}
当在地图上调用get(id)时,它将返回该ID的映射中的Foo,或者它将从服务器检索它,缓存它并返回它.一旦它成立,我就不必考虑它了.另外,由于我设置了softValues(),因此缓存无法填满并导致内存问题,因为系统能够根据内存需求清除缓存中的条目.但是,如果从地图中清除了缓存的值,它可以在下次需要时再次询问服务器!
问题是,这只是一种可以使用的方式.使地图使用强,弱或软键和/或值的选项,以及在特定时间后删除条目的选项,可让您使用它做很多事情.