Java缓存技术-google guava cache

一、简介

guava和ehcache一样也是本地缓存,虽然都是本地缓存,但是有着不同的使用场景。guava是谷歌提供的一个Java工具包,而Guava的Cache部分提供了一套分词完善的本地存储缓存机制,在Guave之前ConcurrentMap,因为能友好的支持并发而经常被用作本地缓存,但它毕竟不具备缓存的一些特性,比如缓存过期,缓存数据加载和刷新等。

 

二、使用场景

1、原意消耗一些本地内存空间提升速度

2、更新锁定

  什么是更新锁呢,当某个缓存失效的时候,大量请求去查询某一个key 当这个key不存在,就会导致多次从数据库中加载数据,Guava cache 可以在cacheloader 的 load方法众加以控制,对同一个key只让一个请求去数据库众读取数据,而其他请求阻塞等待结果。

 

三、Guava cache 的创建方式

1、CacheLoader创建

 

Java代码   收藏代码
  1. LoadingCache loadingCache = CacheBuilder.newBuilder()  
  2.                 /*设置缓存容器的初始容量大小为10*/  
  3.                 .initialCapacity(10)  
  4.                 /*设置缓存容器的最大容量大小为100*/  
  5.                 .maximumSize(100)  
  6.                 /*设置记录缓存命中率*/  
  7.                 .recordStats()  
  8.                 /*设置并发级别为8,智并发基本值可以同事些缓存的线程数*/  
  9.                 .concurrencyLevel(8)  
  10.                 /*设置过期时间为2秒*/  
  11.                 .expireAfterAccess(2, TimeUnit.SECONDS).build(new CacheLoader() {  
  12.                     @Override  
  13.                     public Object load(String key) throws Exception {  
  14.                         System.out.println(System.currentTimeMillis() + " 缓存失效。。。");  
  15.                         return key + ": cache-value";  
  16.                     }  
  17.             });  
  18.    
  19.         /**获取缓存值,这里get方法会抛出 ExecutionException 异常,如果不想让他抛出异常 使用getUnchecked方法 */  
  20.         System.out.println( loadingCache.getUnchecked("111") );  
  21.         /**打印缓存命中率*/  
  22.         System.out.println( loadingCache.stats().toString() );  
 2、使用Callable方式创建

 

Java代码   收藏代码
  1. Cache cache = CacheBuilder.newBuilder().maximumSize(100).build();  
  2.           
  3. String resultval = cache.get("key01"new Callable() {  
  4.    public String call() throws Exception {  
  5.     return "key01-value";  
  6.    }  
  7. }) ;  
  8. System.out.println( resultval );  
 两种方式都有不同的使用场景,希望能合理使用 
3、主动删除缓存
删除某一个缓存 invalidate("key01")
删除所有缓存 invalidateAll() 

你可能感兴趣的:(JAVA)