Java缓存技术-google guava cache 博客分类: Java
程序员文章站
2024-03-19 10:33:52
...
一、简介
guava和ehcache一样也是本地缓存,虽然都是本地缓存,但是有着不同的使用场景。guava是谷歌提供的一个Java工具包,而Guava的Cache部分提供了一套分词完善的本地存储缓存机制,在Guave之前ConcurrentMap,因为能友好的支持并发而经常被用作本地缓存,但它毕竟不具备缓存的一些特性,比如缓存过期,缓存数据加载和刷新等。
二、使用场景
1、原意消耗一些本地内存空间提升速度
2、更新锁定
什么是更新锁呢,当某个缓存失效的时候,大量请求去查询某一个key 当这个key不存在,就会导致多次从数据库中加载数据,Guava cache 可以在cacheloader 的 load方法众加以控制,对同一个key只让一个请求去数据库众读取数据,而其他请求阻塞等待结果。
三、Guava cache 的创建方式
1、CacheLoader创建
LoadingCache<String, Object> loadingCache = CacheBuilder.newBuilder() /*设置缓存容器的初始容量大小为10*/ .initialCapacity(10) /*设置缓存容器的最大容量大小为100*/ .maximumSize(100) /*设置记录缓存命中率*/ .recordStats() /*设置并发级别为8,智并发基本值可以同事些缓存的线程数*/ .concurrencyLevel(8) /*设置过期时间为2秒*/ .expireAfterAccess(2, TimeUnit.SECONDS).build(new CacheLoader<String, Object>() { @Override public Object load(String key) throws Exception { System.out.println(System.currentTimeMillis() + " 缓存失效。。。"); return key + ": cache-value"; } }); /**获取缓存值,这里get方法会抛出 ExecutionException 异常,如果不想让他抛出异常 使用getUnchecked方法 */ System.out.println( loadingCache.getUnchecked("111") ); /**打印缓存命中率*/ System.out.println( loadingCache.stats().toString() );2、使用Callable方式创建
Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(100).build(); String resultval = cache.get("key01", new Callable<String>() { public String call() throws Exception { return "key01-value"; } }) ; System.out.println( resultval );两种方式都有不同的使用场景,希望能合理使用
3、主动删除缓存
删除某一个缓存 invalidate("key01")
删除所有缓存 invalidateAll()
推荐阅读
-
Java缓存技术-google guava cache 博客分类: Java
-
google protobuf 对象转字节码 博客分类: Java
-
google protobuf 对象转字节码 博客分类: Java
-
缓存(1) 博客分类: javabasic java 缓存
-
R2M 缓存 博客分类: Java 基础 缓存
-
tomcat后台抛出异常"AWT-EventQueue-0" :sun.java2d.HeadlessGraphics 博客分类: 技术 sunjvm
-
深入研究java.lang.Runtime类 博客分类: 技术研究学习 虚拟机threadsun
-
JAVA 中的四种解析XML方式 博客分类: java技术webServicexml javaxmlsunc
-
使用Servlet技术实现购物车总体介绍 博客分类: java Servlet购物车
-
如何使用Spring管理Filter和Servlet 博客分类: java技术 servletspring