2017-03-20 88 views

回答

1

基于Caffeine的official repositorywiki,Caffeine是一款基于Java 8的高性能缓存库,提供接近最佳的命中率。它受到Google Guava的启发。

因为咖啡因是内存中缓存,所以实例化缓存对象非常简单。

例如:

LoadingCache<Key, Graph> graphs = Caffeine.newBuilder() 
    .maximumSize(10_000) 
    .expireAfterWrite(5, TimeUnit.MINUTES) 
    .refreshAfterWrite(1, TimeUnit.MINUTES) 
    .build(key -> createExpensiveGraph(key)); 
  1. 查找条目,或者null如果未找到:

    Graph graph = graphs.getIfPresent(key); 
    
  2. 查找,并且如果不存在计算中的条目,或者如果不可计算空:

    graph = graphs.get(key, k -> createExpensiveGraph(key));

    注意:createExpensiveGraph(key)可能是一个DB吸气剂或实际计算图。

  3. 插入或更新条目:

    graphs.put(key, graph); 
    
  4. 删除的条目:

    graphs.invalidate(key); 
    

编辑: 感谢@ BenManes的建议下,我加入的依赖:

Ed它是你的pom.xml并且加上:

<dependency> 
    <groupId>com.github.ben-manes.caffeine</groupId> 
    <artifactId>caffeine</artifactId> 
    <version>1.0.0</version> 
</dependency> 
+0

不,那是编译错误。 – Bravo

+0

我创建了一个示例spring应用程序,并在基于java的配置下创建了Cache对象 cache = Caffeine.newBuilder()。expireAfterWrite(24,TimeUnit.HOURS).build(); ,尝试在服务类中自动调用此类,如下所示: @Autowire private cache cache;但得到错误,至少需要定义1个Cache类型的Bean。为什么这个例外越来越多?我定义了那个bean,请帮忙。 – Bravo

+0

@Bravo是否在构建中添加了依赖项(jar)?对于Spring,你可能想看看他们的[示例](https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-cache)项目。 –