我建议在r10中使用Guava的MapMaker或CacheBuilder。
它们允许自动*place)基于时间和大小,驱逐,以及配套的弱密钥或值。(即将发布的
CacheBuilder承诺将专门针对此类用例而定制。)
因此,您可以初始化地图:
ConcurrentMap<Key, Object> cache = new MapMaker() .weakValues() .makeMap();
而直接的好处是,当一个值被垃圾回收时,整个条目将被删除。此外,您可以使用计算图:
ConcurrentMap<Key, Object> cache = new MapMaker() .weakValues() .makeComputingMap(loadFunction);
其中
loadFunction是
Function<Key,Object>从数据库加载的对象。这样做的好处是,映射将处理对特定对象的并发请求,从而确保查询仅被调用一次。此外,发出请求的代码只需调用
get()即可,并且无论从高速缓存还是从数据库中获取,始终可以期望返回对象。
这些示例正在使用
MapMaker-我还没有玩玩具的乐趣
CacheBuilder。



