欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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