Guava学习笔记之Cache实例

Guava是谷歌的java类库,功能十分强大,下面是本地内存缓存工具类实例,在第一次通过调用get(key)时,会调用load去获取值,当再次调用时,我们发现就直接从缓存中调用了,根据maximumSize设置缓存大小,当大小超过限度的时候,会从缓存中移除最远的数据。实例如下。

Guava cahche实例,通过loadingCache

public class Main {
    static Map<String, Integer> map = new HashMap<String, Integer>();

    public static Integer getValueByKey(String key) {
        System.out.println("通过key:" + key + "获取值");

        return map.get(key);
    }

    @Test
    public void loadingCache() throws ExecutionException {

        map.put("key1", 1);
        map.put("key2", 2);
        map.put("key3", 3);

        LoadingCache<String, Integer> cahceBuilder = CacheBuilder.newBuilder().maximumSize(2)
                .build(new CacheLoader<String, Integer>() {
                    @Override
                    public Integer load(String key) throws Exception {

                        return getValueByKey(key);
                    }

                });

        System.out.println(cahceBuilder.get("key1"));
        System.out.println(cahceBuilder.get("key2"));
        System.out.println(cahceBuilder.get("key3"));
        System.out.println(cahceBuilder.get("key1"));
        System.out.println(cahceBuilder.get("key3"));
        cahceBuilder.put("key1", 4);
        System.out.println(cahceBuilder.get("key1"));
    }

}

运行结果:

当然还有另外一种实现方式,使用callable

移除值可以使用下列方法。

            cache.invalidate("key1");
            cache.invalidateAll();

通过结果可以看出,当重复获得相同key的值时,不会再执行call(),而是从缓冲区读取。

cahceBuilder.refresh("key1");方法可以刷新该key值

CacheLoader.reload(K, V) 生成新的value

CacheBuilder.refreshAfterWrite(long, TimeUnit)   超时后自动刷新cache

时间: 2025-01-04 21:04:26

Guava学习笔记之Cache实例的相关文章

Guava学习笔记:Google Guava 类库简介

> Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.googl

Guava学习笔记:Range

Guava学习笔记:Range 转载:http://www.cnblogs.com/peida/p/Guava_Range.html 在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构.从Google官方文档可以得到定义:Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type).比如1到100之间的整型数据. 在数学里面的范围是有边界和无边界之分的:同样,在Guava中也有这个说法.如果这个范围是有边界的,那么

Guava学习笔记目录

Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面是学习过程中的一些笔记和知识点的记录. 1.Guava学习笔记:Google Guava 类库简介 2

Guava学习笔记:Multimaps

Guava学习笔记:Multimaps 有时候我们需要这样的数据类型Map<String,Collection<String>>,guava中的Multimap就是为了解决这类问题的. Multimap的实现 Multimap提供了丰富的实现,所以你可以用它来替代程序里的Map<K, Collection<V>>,具体的实现如下: 实现 Key实现 Value实现 ArrayListMultimap HashMap ArrayList HashMultima

Guava学习笔记:guava中的Preconditions使用

Guava学习笔记:guava中的Preconditions使用 转载:http://outofmemory.cn/java/guava/base/Preconditions google guava的base包中提供的Preconditions类用来方便的做参数的校验,他主要提供如下方法: checkArgument 接受一个boolean类型的参数和一个可选的errorMsg参数,这个方法用来判断参数是否符合某种条件,符合什么条件google guava不关心,在不符合条件时会抛出Illeg

Guava学习笔记: guava集合之Multiset

Guava学习笔记: guava集合之Multiset Multiset是什么? Multiset看似是一个Set,但是实质上它不是一个Set,它没有继承Set接口,它继承的是Collection<E>接口,你可以向Multiset中添加重复的元素,Multiset会对添加的元素做一个计数. 它本质上是一个Set加一个元素计数器. Multiset使用示例: package cn.outofmemory.guava.collection; import com.google.common.ba

Guava学习笔记: BiMap

Guava学习笔记: BiMap 我们知道Map是一种键值对映射,这个映射是键到值的映射,而BiMap首先也是一种Map,他的特别之处在于,既提供键到值的映射,也提供值到键的映射,所以它是双向Map. 想象这么一个场景,我们需要做一个星期几的中英文表示的相互映射,例如Monday对应的中文表示是星期一,同样星期一对应的英文表示是Monday.这是一个绝好的使用BiMap的场景. package cn.outofmemory.guava.collection; import com.google.

Guava学习笔记:guava中对字符串的操作

Guava学习笔记:guava中对字符串的操作 转载:http://outofmemory.cn/java/guava/base/Strings 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并字符串,字符串匹配的判断等等. 下面我们逐一了解这些操作: 1. 使用com.google.common.base.Strings类的isNullOrEmpty(input)方法判断字符串是否为空        

Guava学习笔记:guava的不可变集合

Guava学习笔记:guava的不可变集合 不可变集合的意义 不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的: 不可变对象被多个线程调用时,不存在竞态条件问题 不可变集合不需要考虑变化,因此可以节省时间和空间.所有不可变的集合都比它们的可变形式有更好的内存利用率(分析和测试细节): 不可变对象因为有固定不变,可以作为常量来安全使用. 创建对象的不可变拷贝是一项很好的防御性编程技巧.Guava为所有JDK标准集合类型和Guava新集合类型都提供了简单易用的不可变版本.