我在使用谷歌番石榴缓存。定义为:
Cache<String, String> myCache= CacheBuilder.newBuilder().maximumSize(100).build(); 当我执行地图操作(如get/put )时,请使用:
myCache.asMap().put("someString", "someString");
String someValueFromCache = myCache.asMap().get("someString");我想知道,如果我按照以下方式使用它,是否会有任何优化或任何不同之处,即不使用它作为地图:
myCache.put("someString", "someString");
String someValueFromCache = myCache.get("someString");发布于 2019-04-30 04:55:19
从番石榴缓存文档:https://github.com/google/guava/wiki/CachesExplained#inserted-directly
值可以直接用cache.put(key,value)插入缓存中。这将覆盖指定键的缓存中的任何先前条目。还可以使用由ConcurrentMap ()视图公开的任何Cache.asMap方法对缓存进行更改。请注意,asMap视图上的任何方法都不会导致条目自动加载到缓存中。此外,该视图上的原子操作超出了自动缓存加载的范围,因此在使用Cache.get或可调用的缓存加载值的缓存中,Cache.asMap(K,可调用)应该总是优于Cache.asMap().putIfAbsent。
不要认为您应该使用asMap()视图来修改缓存。
发布于 2019-04-30 08:47:02
除了@rdas的答复外,夫妇还注意到:
LoadingCache (如您的示例中所示),两者实际上没有区别(嗯,使用.asMap()比较混乱),有时您希望/必须使用(Concurrent)Map接口来实现兼容性,在这种情况下,使用.asMap()是非常好的。Cache接口不提供这样的方法,但是Map提供--参见 without passing any keys"。Cache通过CacheBuilder#recordStats()启用了CacheStats,那么通过它的.asMap()视图修改它们不会更新CacheStats。https://stackoverflow.com/questions/55914135
复制相似问题