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创建

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() 

猜你喜欢

转载自hpgary.iteye.com/blog/2406252