当前位置: 代码迷 >> 综合 >> Google Guava-缓存
  详细解决方案

Google Guava-缓存

热度:76   发布时间:2024-01-05 08:58:35.0

项目需要使用缓存,恰好缓存对象不适合存储为字符串,而且为了高性能希望能有过期时间和LRU特性。 LRU好办,直接集成JDK自带的LinkedHashMap,实现removeEldestEntry方法就行。 可是过期时间就需要自己实现了,实现思路到还不复杂,可以需要测试。最后还是决定找找看看现有类库是否已经提供该功能,首先想到的就是Guava,一看文档果然提供了这种类。

直接上代码

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).removalListener(MY_LISTENER).build(new CacheLoader<Key, Graph>() {
    public Graph load(Key key) throws AnyException {
    return createExpensiveGraph(key);}});

关于cache大小和过期时间,代码中直接可见不需要解释。

关于过期时间有两种选项一种是expireAfterWrite,一种是expireAfterAccess。我们项目中实际使用的expireAfterAccess, 我们希望如果这个key一致被访问化就一致有效,不要过期。 每个项目实际业务不同可以根据情况进行选择。

关于removalListener, 我们可以在对象因为过期时间到达或者因为LRU被替换时,调用一些destroy工作。

引用;
1, https://github.com/google/guava/wiki/CachesExplained

  相关解决方案