码迷,mamicode.com
首页 > 系统相关 > 详细

Guava学习笔记之Cache实例

时间:2014-12-08 21:29:45      阅读:339      评论:0      收藏:0      [点我收藏+]

标签: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"));
    }

}


运行结果:

bubuko.com,布布扣



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


bubuko.com,布布扣



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

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

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


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

 CacheLoader.reload(K, V) 生成新的value
CacheBuilder.refreshAfterWrite(long, TimeUnit)   超时后自动刷新cache

Guava学习笔记之Cache实例

标签:guava   cache   

原文地址:http://blog.csdn.net/tianyijavaoracle/article/details/41808077

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!