Guava基于策略的缓存

时间:2012-08-10 21:25:12

标签: java caching guava

我正在尝试创建一个简单的会话缓存,允许我在整个缓存上设置最大大小。缓存不是计算缓存,因此我认为带有CacheBuilder的番石榴LoadingCache不合适。我希望能够执行以下操作:

来自缓存的

get(key)数据,这些数据先前存储在存储操作期间 在存储操作期间put(key,value)进入缓存

我尝试使用MapMaker,但最大尺寸方法似乎过时了。有谁知道我有什么选择?我总是可以使用一个简单的地图并按照我自己的策略编制自己的政策吗?

1 个答案:

答案 0 :(得分:6)

  

缓存不是计算缓存,所以我认为带有CacheBuilder的番石榴LoadingCache是不合适的。

所以在没有它的情况下使用CacheBuilder。它的工作方式完全相同,只是如果build()调用普通build(CacheLoader)。一切都保持不变,除了你得到一个“普通”缓存而不是加载缓存。就是这样。

  

我尝试使用MapMaker,但最大尺寸方法似乎过时了。

通过MapMaper缓存有一天会消失,忘掉它。


这个例子非常简单,只需创建

private final static Cache<String, String> cache =
    CacheBuilder.newBuilder().maximumSize(123).build();

然后试试这个:

cache.put("a", "A");
cache.put("b", "B");
System.out.println(cache.getIfPresent("a"));
for (int i=0; i<1000; ++i) cache.put("n" + i, "x");
System.out.println(cache.getIfPresent("a"));