首页 课程 师资 教程 报名

Java缓存框架教程,Caffeine内存缓存框架

  • 2020-02-11 09:54:11
  • 5692次 动力节点


  Caffeine是一种高性能的缓存库,是基于Java8的最佳(最优)缓存框架。


  Cache(缓存),基于GoogleGuava,Caffeine提供一个内存缓存,大大改善了设计Guava'scache和ConcurrentLinkedHashMap的体验。


java缓存框架教程,Caffeine内存缓存框架


  缓存类似于ConcurrentMap,但二者并不完全相同。最基本的区别是,ConcurrentMap保存添加到其中的所有元素,直到显式地删除它们。另一方面,缓存通常配置为自动删除条目,以限制其内存占用。在某些情况下,LoadingCache或AsyncLoadingCache可能很有用,因为它是自动缓存加载的。


  Caffeine提供了灵活的结构来创建缓存,并且有以下特性:


  自动加载条目到缓存中,可选异步方式


  可以基于大小剔除


  可以设置过期时间,时间可以从上次访问或上次写入开始计算


  异步刷新


  keys自动包装在弱引用中


  values自动包装在弱引用或软引用中


  条目剔除通知


  缓存访问统计


  1.加载/填充


  Caffeine提供以下四种类型的加载策略:


  1.1.Manual


java缓存框架教程,Caffeine内存缓存框架


  Cache接口可以显式地控制检索、更新和删除条目。


  1.2.Loading


java缓存框架教程,Caffeine内存缓存框架


  LoadingCache通过关联一个CacheLoader来构建Cache


  通过LoadingCache的getAll方法,可以批量查询


  1.3.Asynchronous(Manual)


java缓存框架教程,Caffeine内存缓存框架


  AsyncCache是另一种Cache,它基于Executor计算条目,并返回一个CompletableFuture。


  1.4.AsynchronouslyLoading


java缓存框架教程,Caffeine内存缓存框架


  AsyncLoadingCache是关联了AsyncCacheLoader的AsyncCache


  2.剔除


  Caffeine提供三种剔除方式:基于大小、基于时间、基于引用


  2.1.Size-based


java缓存框架教程,Caffeine内存缓存框架


  如果缓存的条目数量不应该超过某个值,那么可以使用Caffeine.maximumSize(long)。如果超过这个值,则会剔除很久没有被访问过或者不经常使用的那个条目。


  如果,不同的条目有不同的权重值的话,那么你可以用Caffeine.weigher(Weigher)来指定一个权重函数,并且使用Caffeine.maximumWeight(long)来设定最大的权重值。


  简单的来说,要么限制缓存条目的数量,要么限制缓存条目的权重值,二者取其一。限制数量很好理解,限制权重的话首先你得提供一个函数来设定每个条目的权重值是多少,然后才能显示最大的权重是多少。


  2.2.Time-based


java缓存框架教程,Caffeine内存缓存框架


  expireAfterAccess(long,TimeUnit):最后一次被访问(读或者写)后多久失效


  expireAfterWrite(long,TimeUnit):最后一次被创建或修改后多久失效


  expireAfter(Expiry):创建后多久失效


  建议,主动维护缓存中条目,而不是等到访问的时候发现缓存条目已经失效了才去重新加载。意思就是,提前加载,定期维护。


  可以在构建的时候Caffeine.scheduler(Scheduler)来指定调度线程


  2.3.Reference-based


java缓存框架教程,Caffeine内存缓存框架


  Caffeine.weakKeys()使用弱引用存储key。如果没有强引用这个key,则允许垃圾回收器回收该条目。注意,这是使用==判断key的。


  Caffeine.weakValues()使用弱引用存储value。如果没有强引用这个value,则允许垃圾回收器回收该条目。注意,这是使用==判断key的。


  Caffeine.softValues()使用软引用存储value。


  3.删除


  术语:


  eviction指受策略影响而被删除


  invalidation值被调用者手动删除


  removal值因eviction或invalidation而发生的一种行为


  3.1.明确地删除


java缓存框架教程,Caffeine内存缓存框架


  3.2.监听器


java缓存框架教程,Caffeine内存缓存框架


  4.刷新


java缓存框架教程,Caffeine内存缓存框架


  通过LoadingCache.refresh(K)进行异步刷新,通过覆盖CacheLoader.reload(K,V)可以自定义刷新逻辑


  5.统计


java缓存框架教程,Caffeine内存缓存框架


  使用Caffeine.recordStats(),你可以打开统计功能。Cache.stats()方法会返回一个CacheStats对象,该对象提供以下统计信息:


  hitRate():命中率


  evictionCount():被剔除的条目数量


  averageLoadPenalty():加载新值所花费的平均时间


  6.示例


  终于要说到重点了


  一般来讲,用Redis作为一级话缓存,Caffeine作为二级缓存


  6.1.示例一:单独使用


  pom.xml


java缓存框架教程,Caffeine内存缓存框架


  config


java缓存框架教程,Caffeine内存缓存框架


  service


java缓存框架教程,Caffeine内存缓存框架


  补充一点:你都用本地缓存了,必定已经用了一级缓存了。一级缓存无法达到预期的性能,才会选择用本地缓存。


  controller


java缓存框架教程,Caffeine内存缓存框架


  application.yml


java缓存框架教程,Caffeine内存缓存框架


  service


java缓存框架教程,Caffeine内存缓存框架


  用注解方便是方便,但是不好控制,还是自定义的好


  7.工程结构


  java缓存框架教程,Caffeine内存缓存框架


  完整的pom.xml


java缓存框架教程,Caffeine内存缓存框架


       以上就是动力节点Java培训机构小编介绍的“java缓存框架教程,Caffeine内存缓存框架”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


  相关内容


  深入浅出的Java学习路径,Java练手项目学习


  新手Java的三大框架ssh学习


  JavaSSH框架教学视频


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交