网站代码预览器,共享经济网站建设策划书,合肥网站seo推广,长沙建网站速成班简单介绍Caffeine是新出现的一个高性能的Java缓存#xff0c;有了它完全可以代替Guava Cache#xff0c;来实现更加高效的缓存#xff1b;Caffeine采用了W-TinyLFU回收策略#xff0c;集合了LRU和LFU的优点#xff0c;提供了一个最佳的命中率#xff0c;在效率上可以秒杀…简单介绍Caffeine是新出现的一个高性能的Java缓存有了它完全可以代替Guava Cache来实现更加高效的缓存Caffeine采用了W-TinyLFU回收策略集合了LRU和LFU的优点提供了一个最佳的命中率在效率上可以秒杀Guava Cache下面盗取一个来自网络的性能比较的截图如何使用Caffeine使用非常简单跟Guava Cache的API使用几乎一致下面就话不多说直接进入代码使用和学习中。手动加载import java.util.concurrent.TimeUnit;import com.github.benmanes.caffeine.cache.Cache;import com.github.benmanes.caffeine.cache.Caffeine;public class CaffeineManualLoadTest {public static void main(String[] args) {// 手动加载Cache manualCache Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build();String key test1;// 根据key查询一个缓存如果没有则调用createTestValue方法将返回值写到缓存// 如果createTestValue方法返回空则get方法返回空// 如果createTestValue方法抛出异常则get方法返回异常Object oj manualCache.get(key, k - createTestValue(k));System.out.println(oj oj);// 将一个值写入缓存如果存在就会覆盖掉已经存在的值manualCache.put(key, hello world.);oj manualCache.getIfPresent(key);System.out.println(oj oj);// 删除一个缓存manualCache.invalidate(key);oj manualCache.getIfPresent(key);System.out.println(oj oj);}private static Object createTestValue(String k) {return null;}}同步加载import java.util.concurrent.TimeUnit;import com.github.benmanes.caffeine.cache.Caffeine;import com.github.benmanes.caffeine.cache.LoadingCache;public class CaffeineLoadingTest {public static void main(String[] args) {// 同步加载LoadingCache loadingCache Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build(key - createTestValue(key));String key test1;// 在获取指定key的值的时候// 如果没有获取到则通过在构建同步缓存的时候调用createTestValue方法写入方法值Object oj loadingCache.get(key);System.out.println(oj : oj);}private static Object createTestValue(String k) {return k;}}异步加载import java.util.concurrent.CompletableFuture;import java.util.concurrent.TimeUnit;import com.github.benmanes.caffeine.cache.AsyncLoadingCache;import com.github.benmanes.caffeine.cache.Caffeine;public class CaffeineAsyncLoadTest {public static void main(String[] args) {// 异步加载AsyncLoadingCache asyncLoadingCache Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).buildAsync(key - createTestValue(key));String key test1;// 查询并且在指定的key不存在的时候通过异步的方式来构建缓存返回的是CompletableFutureCompletableFuture futrueOj asyncLoadingCache.get(key);}private static Object createTestValue(String k) {return jingjing say: hello world.;}}驱逐策略1.基于大小Caffeine.maximumSize(long)Caffeine.maximumWeight(long)注意这两个不能同时使用。2.基于时间可以设置为基于秒分等等时间策略。3.基于引用用到了Java中的强引用软引用弱引用的概念去实现的。