博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Guava库学习:学习Guava Cache(二)Guava caches(1)_Cache
阅读量:6692 次
发布时间:2019-06-25

本文共 1491 字,大约阅读时间需要 4 分钟。

hot3.png

    链接地址:

    上一篇,中我们简单的学习了Guava Cache,提到了MapMaker中的缓存机制,对Guava Cache的机制做了初步的了解,在文章的最后,我们提到了CacheBuilder(Guava Cache的核心),在开始Guava CacheBuilder的学习之前,我们先来做一些准备工作:Guava caches(1)_Cache。

 

    Guava Cache缓存机制有两个基本的接口:Cache和LoadingCache,LoadingCache接口继承自Cache接口,本篇我们首先来学习Cache接口。

 

    Cache

    Cache接口提供了键和值的映射,但是Cache接口中提供的一些方法比HashMap提供的更基本。使用maps或caches的传统做法是:我们提 供一个key,如果缓存中存在key对应的value值,我们就将这个value值返回,否则的话,如果通过相应的key找到映射关系,就返回null 值,为了在缓存中设置value值,我们可能需要这样做:

put(key,value);

    我们需要明确的在cache或map中关联key和value,Cache使用了传统的put方法设置value值,但是获取value的时候,Guava Cache有自己的调用风格,如下:

V value = cache.get(key, Callable<? Extends V> value);

    上面的方法会检索当前的value值,如果值不存在的话会从Callback实例中提取value值,通过key关联value,并返回相应的value值,它为我们提供了通过调用一个方法来替代下面风格的编程:

value = cache.get(key);if(value == null){    value = someService.retrieveValue();    cache.put(key,value);}

    一个回调函数的使用意味着一个异步操作可能会发生,但是如果我们不需要执行一个异步任务我们又该怎么做呢?我们可以使用com.google.common.util. concurrent包里面的Callables类,Callables提供了一个方法用于处理Callable接口,使用代码如下所示:

Callable<String> value = Callables.returning(
"Foo"
);

    在上面的代码中,我们调用returning()方法构造并返回了一个Callable实例,当这个Callable实例调用get方法时会返回我们传递的“Foo”值,所以我们可以重新实现一下我们最初的代码:

cache.get(key,Callables.returning(someService.retrieveValue());

    需要记住的是,如果value存在,缓存的value就会被返回。如果我们偏爱“如果存在...否则...”这样的编程风格的话,Guava同样提供了 getIfPresent(key)方法,使我们可以以传统方式编程,同样也一些使缓存中的value值失效的方法,如下所示:

 

    invalidate(key):废弃缓存中当前key对应的所有value值。

    

    invalidateAll():废弃缓存中所有的value值。

 

    invalidateAll(Iterable<?> keys):废弃传入key集合中对应的所有缓存中的value值。

转载于:https://my.oschina.net/realfighter/blog/350032

你可能感兴趣的文章
Android系统关机或几种方式重启
查看>>
Elasticsearch-2.4.3的3节点安装(多种方式图文详解)(含 head、kopf、marvel、shield和watcher插件安装和使用)...
查看>>
ASP.NET MVC3实战系列(一):简单示例
查看>>
Spark RDD/Core 编程 API入门系列 之rdd案例(map、filter、flatMap、groupByKey、reduceByKey、join、cogroupy等)(四)...
查看>>
jQuery:1.5.3,表单验证(父级(parent)层次追加(apped))
查看>>
METAL渲染是什么?
查看>>
4.11. 重命名文件名
查看>>
使用现有ECC数据库进行安装或者恢复系统
查看>>
发布我的高性能纯C#图像处理基本类,顺便也挑战一下极限。:)
查看>>
在Ubuntu上单机安装Hadoop
查看>>
安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法
查看>>
存储过程中执行动态Sql语句
查看>>
10 个 SharePoint 2010 实用实验室手册开发指南
查看>>
计算列和的宏
查看>>
(重点)链式栈
查看>>
Linux - 设置SFTP服务用户目录权限
查看>>
[CareerCup] 8.2 Call Center 电话中心
查看>>
android 回调机制实例!
查看>>
分布式监控系统Zabbix-3.0.3--短信报警设置
查看>>
C# WinForm开发系列 - 图形图像处理
查看>>