Guava入门~Guava caches

Cache 接口

put(key,value):往缓存中添加值;

V value = cache.get(key, Callable<? Extends V> value):从缓存中获取值;

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

如果不想执行异步任务,可以使用Callables

Callable<String> value = Callables.returning("Foo");cache.get(key,Callables.returning(someService.retrieveValue());

getIfPresent(key):如果存在返回value,否则null;

丢弃缓存

invalidate(key)

invalidateAll()

invalidateAll(Iterable<?> keys)

LoadingCache

Book book = loadingCache.get(id);

Loading values

ImmutableMap<key,value> map = cache.getAll(Iterable<? Extends key>);

Refreshing values in the cache

refresh(key);

示例

package bbejeck.guava.chapter6.cache;import bbejeck.guava.common.model.TradeAccount;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.junit.Test;import java.util.concurrent.TimeUnit;import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;/*** User: Bill Bejeck* Date: 7/22/13* Time: 10:53 PM*/
public class LoadingCacheTest {private CacheLoader<String, TradeAccount> cacheLoader = mock(CacheLoader.class);@Testpublic void testCacheLoaderOnlyCalledOnce() throws Exception {TradeAccount expectedTradeAccount = new TradeAccount.Builder().balance(250000.12).build();when(cacheLoader.load("223")).thenReturn(expectedTradeAccount);LoadingCache<String, TradeAccount> tradeAccountCache = CacheBuilder.newBuilder().maximumSize(5000L).build(cacheLoader);TradeAccount tradeAccount = tradeAccountCache.get("223");assertThat(tradeAccount, is(expectedTradeAccount));for (int i = 0; i < 10; i++) {TradeAccount tradeAccount1 = tradeAccountCache.get("223");assertThat(tradeAccount1, is(expectedTradeAccount));}verify(cacheLoader, times(1)).load("223");}@Testpublic void testCacheLoaderCalledInitiallyAndAfterExpiration() throws Exception {TradeAccount expectedTradeAccount = new TradeAccount.Builder().balance(250000.12).build();when(cacheLoader.load("223")).thenReturn(expectedTradeAccount);LoadingCache<String, TradeAccount> tradeAccountCache = CacheBuilder.newBuilder().maximumSize(5000L).expireAfterAccess(500l, TimeUnit.MILLISECONDS).build(cacheLoader);TradeAccount tradeAccount = tradeAccountCache.get("223");assertThat(tradeAccount, is(expectedTradeAccount));Thread.sleep(1000);TradeAccount tradeAccount1 = tradeAccountCache.get("223");assertThat(tradeAccount1, is(expectedTradeAccount));verify(cacheLoader, times(2)).load("223");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小甲鱼 OllyDbg 教程系列 (十二) : inline patch ( 内嵌补丁 ) 之 调用堆栈查找法

小甲鱼 OD 教程&#xff1a;https://www.bilibili.com/video/av6889190?p20 堆栈调用方法 程序运行后&#xff0c;直接断点到 004DC0D1 这个 位置&#xff0c;按 F8一直没反应&#xff0c;打开程序&#xff0c;可以看到 neg 窗口&#xff0c; 点击 exit &#xff0c;关闭 neg …

Solaris 11 安装图解(8)

豆豆网 技能应用频道 图 13 完成安装界面 完成安装之后&#xff0c;安装日记会保留在文件中。可在以下地位检查安装日记&#xff1a;■ /a/var/sadm/system/logs/install_log■ /a/var/sadm/system/logs/upgrade_log■ /a/var/sadm/system/logs/sysidtool.log三、 系统登录…

CPU是如何制造出来的

来源&#xff1a;EDN电子技术设计摘要&#xff1a;Intelx86架构已经经历了二十多个年头&#xff0c;而x86架构的CPU对我们大多数人的工作、生活影响颇为深远。CPU是现代计算机的核心部件&#xff0c;又称为“微处理器”。对于PC而言&#xff0c;CPU的规格与频率常常被用来作为衡…

怎样使用Eclipse来开发Android源码

怎样使用Eclipse来开发Android源码 用eclipse&#xff0b;ADT作为android开发工具&#xff0c;可以说是很方便的&#xff0c;在HelloActivity小程序里我们就感觉到eclipse功能的强大。那么&#xff0c;我们可以用 eclipse来开发android源码吗&#xff1f;如果我们直接把android…

解析:GE工业互联网平台Predix

来源&#xff1a;赛迪智库摘要&#xff1a;当前&#xff0c;工业互联网平台作为我国构建工业互联网生态的核心载体&#xff0c;成为推动制造业与互联网融合的重要抓手。早在2012年GE提出工业互联网的概念&#xff0c;随后推出Predix&#xff0c;要将GE在工业领域的技术设备硬件…

小甲鱼 OllyDbg 教程系列 (十三) : 把代码和变量注入程序 以及 硬件断点

小甲鱼 OllyDbg 视频教程&#xff1a;https://www.bilibili.com/video/av6889190?p21 程序下载地址&#xff1a;https://pan.baidu.com/s/1A4-BDgbdUgy-cmI4IMMzYw 提取码&#xff1a;jsdv 开始&#xff0c;按照惯例&#xff0c;首先用 PEiD 打开&#xff0c;看下是什么语…

Guava入门~CacheBuilderSpec

示例 package bbejeck.guava.chapter6.cache;import bbejeck.guava.common.model.TradeAccount; import bbejeck.guava.common.service.BookServiceImpl; import bbejeck.guava.common.service.TradeAccountService; import com.google.common.base.Ticker; import com.google…

初识C#

Timer转载于:https://www.cnblogs.com/changweihua/archive/2011/03/07/1974171.html

小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear

小甲鱼 OD 使用教程&#xff1a;https://www.bilibili.com/video/av6889190?p22 exeScope 下载&#xff1a;https://pan.baidu.com/s/1dSWapltdQsX9ttl_lSoq_g 提取码&#xff1a;yz2p URlegal 下载&#xff1a;https://pan.baidu.com/s/1Ljbvsnk_1Ps0e-cp7a1F9A 提取码…

这两年的人工智能淘金热 真正赚钱的公司是这几家

编译&#xff1a;网易智能人工智能已经成为人们热捧的对象&#xff0c;正在我们中间掀起一股“淘金热”&#xff0c;但真正从中获得经济利益的人是谁呢&#xff1f;是那些争相成为淘金者的大多数创业公司吗&#xff1f;是那些广泛从事“掘金业务”的公司吗&#xff1f;还是那些…

Swiftfox:极速的冲浪体验

Toy Posted in Apps将 Firefox 针对特定的处置惩罚器进行优化之后&#xff0c;便成了 Swiftfox。行使 Swiftfox&#xff0c;无论是启动次第本人&#xff0c;还是阅读网站内容&#xff0c;都能让你觉取得一股强烈的极速之风。更爽的是&#xff0c;你之前所用的 Firefox 设置、主…

小甲鱼 OllyDbg 教程系列 (十五) : 逆向注册机简单算法

小甲鱼 OD 教程&#xff1a; https://www.bilibili.com/video/av6889190?p24 KeygenMe 下载地址&#xff1a;https://pan.baidu.com/s/1gXAscM3WCNpIqxIm5t1rrQ 提取码&#xff1a;z5in 前言 用 OD 打开程序 输入框 常用 API&#xff0c;当不知道是哪个时&#xff0c;可…

以大自然为师,可上天入地的11款仿生机器人

来源&#xff1a;资本实验室尽管人类已经借助科技的力量改造了世界&#xff0c;但许多技能仍然为人类所不拥有&#xff0c;很多恶劣的环境仍然是人类的禁区。而经过大自然的“公平选择”&#xff0c;使得某些生物具有我们所不具备的独特“技能”“&#xff0c;也适合在人类难以…

Guava入门~CacheStats

构建缓存对象时调用recordStats()&#xff0c;指定可以做缓存统计 LoadingCache<String,TradeAccount> tradeAccountCache CacheBuilder.newBuilder().recordStats() 获取缓存统计结果 CacheStats cacheStats cache.stats(); 示例 package bbejeck.guava.chapter6…

Linux下细碎温度等的监控与调整

作者: zhania 出自: http://www.linuxdiyf.com 装tp-fancontrol&#xff0c;限制一下gpu的温度ubuntuCPU的温度cat /proc/cpuinfo显卡温度 有个sensor applet&#xff0c;装了都能透露表现在终端里运转cpufreq-info检察CPU信息 sudo cpufreq-selector -c cpu号梗概 sudo cpufr…

深度分析:区块链技术未来发展的 8 个趋势

来源&#xff1a;36氪CB Insigh日前发表了一份关于区块链技术的研究报告&#xff0c;结合区块链目前的发展现状&#xff0c;提出了区块链技术未来发展的8个趋势。虽然加密货币和加密资产的价格已从2017年的峰值回落&#xff0c;但区块链创业公司的股权投资&#xff0c;在2018年…

小甲鱼 OllyDbg 教程系列 (十六) : 简单病毒的逆向分析

小甲鱼 OD 教程&#xff08; 多态 和 变形 分析 &#xff09;&#xff1a; https://www.bilibili.com/video/av6889190?p25 https://www.bilibili.com/video/av6889190?p26 ReverseMe Tutorial.zip&#xff1a;https://pan.baidu.com/s/1xOUvXqX6lVdcCwQvpql…

Oracle 9i 在 Red Hat 7.1 和 7.2 上的装配

泉源&#xff1a;网海拾贝 本文是我在 Red Hat 7.1 &#xff08;内核版本&#xff1a;2.4.2-2 &#xff09;和 7.2&#xff08;内核版本&#xff1a;2.4.7-10&#xff09; 上装配 Oracle 9i (9.0.1) 数据库的总结&#xff0c;要是需求更多的信息请参考 Oracle 的文档&#xff1…

Guava入门~RemovalListener

RemovalNotification 实现Map.Entry接口 getCause()获取RemovalCause 1.COLLECTED: key或value被垃圾回收&#xff1b; 2.EXPIRED:已过期&#xff1b; 3.EXPLICIT:手动移除&#xff1b; 4.REPLACED:被替换&#xff1b; 5.SIZE:超过了最大限制数量。 package bbejeck.gu…

反调试技术揭秘(转)

在调试一些病毒程序的时候&#xff0c;可能会碰到一些反调试技术&#xff0c;也就是说&#xff0c;被调试的程序可以检测到自己是否被调试器附加了&#xff0c;如果探知自己正在被调试&#xff0c;肯定是有人试图反汇编之类的方法破解自己。为了了解如何破解反调试技术&#xf…