Caffeine缓存框架入门学习(caffeine cacheloader)

  本篇文章为你整理了Caffeine缓存框架入门学习(caffeine cacheloader)的详细内容,包含有caffeine cache caffeine cacheloader caffe 框架 caffe框架可以干嘛 Caffeine缓存框架入门学习,希望能帮助你了解 Caffeine缓存框架入门学习。

   .expireAfterWrite(10, TimeUnit.MINUTES)

   //缓存元素删除监听器,参数分别为缓存的key,value,驱逐原因

   .removalListener((Key key, Object value, RemovalCause cause) -

   System.out.printf("Key %s was removed (%s)%n", key, cause))

   .build();

  

 

 

  填充策略分为手动填充,自动填充,异步手动填充和异步自动填充四种

  
// 查找一个缓存元素, 没有查找到的时候返回null

  MyObject graph = cache.getIfPresent(key);

  // 查找缓存,如果缓存不存在则生成缓存元素, 如果无法生成则返回null

  graph = cache.get(key, k - createObject(key));

  // 添加或者更新一个缓存元素

  cache.put(key, graph);

  // 移除一个缓存元素

  cache.invalidate(key);

  

 

 

  

LoadingCache Key, Graph cache = Caffeine.newBuilder()

 

   //自动填充即在初始化的时候就指定自动填充函数,当缓存中没有命中数据的时候自动执行填充函数

   .build(key - createExpensiveGraph(key));

  // 查找缓存,如果缓存不存在则生成缓存元素, 如果无法生成则返回null

  Graph graph = cache.get(key);

  // 批量查找缓存,如果缓存不存在则生成缓存元素

  Map Key, Graph graphs = cache.getAll(keys);

  

 

  异步手动填充

  

AsyncCache Key, Graph cache = Caffeine.newBuilder()

 

   .buildAsync();

  // 查找缓存元素,如果不存在,则异步生成

  CompletableFuture Graph graph = cache.get(key, k - createExpensiveGraph(key));

  

 

  异步自动填充

  

AsyncLoadingCache Key, Graph cache = Caffeine.newBuilder()

 

   // 你可以选择: 去异步的封装一段同步操作来生成缓存元素

   .buildAsync(key - createExpensiveGraph(key));

   // 你也可以选择: 构建一个异步缓存元素操作并返回一个future

   .buildAsync((key, executor) - createExpensiveGraphAsync(key, executor));

  // 查找缓存元素,如果其不存在,将会异步进行生成

  CompletableFuture Graph graph = cache.get(key);

  // 批量查找缓存元素,如果其不存在,将会异步进行生成

  CompletableFuture Map Key, Graph graphs = cache.getAll(keys);

  

 

  驱逐策略有三种:基于大小驱逐,基于时间驱逐,基于引用驱逐

  
// 根据缓存的权重来进行驱逐(权重只是用于确定缓存大小,不会用于决定该缓存是否被驱逐)

  LoadingCache Key, Graph graphs = Caffeine.newBuilder()

   .maximumWeight(10_000)

   .weigher((Key key, Graph graph) - graph.vertices().size())

   .build(key - createExpensiveGraph(key));

  

 

 

  基于时间驱逐

  

LoadingCache Key, Graph graphs = Caffeine.newBuilder()

 

   //当指定时间内没有被读写则被清除

   .expireAfterAccess(5, TimeUnit.MINUTES)

   .build(key - createExpensiveGraph(key));

  LoadingCache Key, Graph graphs = Caffeine.newBuilder()

   //最后一次写入固定时间后被清除

   .expireAfterWrite(10, TimeUnit.MINUTES)

   .build(key - createExpensiveGraph(key));

  //还可以使用exoureAfter()来自定义到期驱逐策略,详见文章末尾参考链接

  

 

  基于引用驱逐

  

LoadingCache Key, Graph graphs = Caffeine.newBuilder()

 

   //弱引用键值

   .weakKeys()

   .weakValues()

   .build(key - createExpensiveGraph(key));

  // 当垃圾收集器需要释放内存时驱逐

  LoadingCache Key, Graph graphs = Caffeine.newBuilder()

   //软引用值

   .softValues()

   .build(key - createExpensiveGraph(key));

  

 

  注意:AsyncLoadingCache不支持弱引用和软引用。

  以上仅为基础部分内容,详细学习参考文末链接。

  参考:
 

  https://blog.csdn.net/crazymakercircle/article/details/113751575
 

  https://zhuanlan.zhihu.com/p/329684099

  以上就是Caffeine缓存框架入门学习(caffeine cacheloader)的详细内容,想要了解更多 Caffeine缓存框架入门学习的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: