一、简介
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() );
- 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()