前几天准备在写一个本地缓存的时候,有一个功能是设置超时时间,我当时用的是每次get的时候判断上次get的时间,跟当前时间对比看是否超过预期时间,来决定是否过期的。
RednaxelaFX提示我说,可以考虑使用googleCollection的MapMaker,除了可以设置超时功能外,还可以绑定key的未取到值的function,当通过get(key)取缓存为空的时候,可以通过这个绑定的function来将返回值put到缓存中,留着下一次get。
听完这些介绍,心动不已,找个时间,简单的test了下MapMaker,果然感觉很强大。
GoogleCollection的下载地址:http://code.google.com/p/google-collections/
下面是我的测试代码。
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import com.google.common.base.Function;
import com.google.common.collect.MapMaker;
/**
* @author guoliang created GoogleColTestMain.java
* @since 2010-4-28 下午05:48:55
*/
public class GoogleColTestMain {
/**
* @param args
*/
public static void main(String[] args) {
/**
* softKeys
* weakValues
* 可以设置key跟value的strong,soft,weak属性。不错不错。
* expiration(3, TimeUnit.SECONDS)设置超时时间为3秒
*
*/
ConcurrentMap<String, String> testMap = new MapMaker().concurrencyLevel(32).softKeys().weakValues().expiration(
3, TimeUnit.SECONDS).makeComputingMap(new Function<String, String>() {
/**
* 这里就是绑定的根据key没找到value的时候触发的function,
* 可以将这里的返回值放到对应的key的value中!
* @param arg0
* @return
*/
@Override
public String apply(String arg0) {
return "create:" + arg0;
}
});
testMap.put("a", "testa");
testMap.put("b", "testb");
System.out.println(testMap.get("a"));
System.out.println(testMap.get("b"));
System.out.println(testMap.get("c"));
/**
* 这里sleep4秒钟过后,
* 缓存都失效,再get就会根据绑定的function去获得value放在map中了。
*/
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 看看这里的再输出,是不是就是新的值了!~
*/
System.out.println(testMap.get("a"));
System.out.println(testMap.get("b"));
System.out.println(testMap.get("c"));
}
}
感觉果然很强大!感谢开源,感谢google~~~
分享到:
相关推荐
mapmaker 中文使用说明,内容详尽
介绍了当前普遍用于遗传图谱构建和QTL 定位的软件MAPMAKER3.0 (forPC ) 的功能、数据结构和基本操作命令与步骤;指出了该软件存在的问题与不足
MAPmaker生物软件
遗传育种作图软件,mapmaker exp 3b升级版。
斜45度游戏地图编辑器斜45度游戏地图编辑器斜45度游戏地图编辑器斜45度游戏地图编辑器斜45度游戏地图编辑器
是一种用于构建遗传连锁图谱并利用连锁图谱进行复合性状基因定位的交互式计算机软件
Mapmaker作图软件使用演示资料PPT教案学习.pptx
MapMaker Exp3.0b.exe
Mapmaker3.0_winQTLCart2.0简单中文教程和举例
制图师-制作地图mapmaker为制作Map提供了一个更好的接口,因此您可以传递一个普通对象,而不是默认实现接受的2数组。使用 // default implementationnew Map ( [ [ 'key' , 'val' ] , [ 'greeting' , 'hi' ] ] )// ...
import com.google.common.base.Preconditions 编译Setting 或SystemUI会用到。欢迎下载!!
AIC21-MapMaker AIC21简单MapMaker
NULL 博文链接:https://zhuxi27.iteye.com/blog/436631
google-collect-1.0-rc1.jar 用于获取Lists.newArrayList
OpenStreetMap可用于打印城镇步行地图,指南地图以及使用地图图案制作商品。但是,很少有人了解高性能但复杂的软件和编程。 我们正在开发这种“城市步行地图制作器”,希望即使是那些“可以用个人计算机制作小文件的...
视频图matlab代码MAPmAKER:不确定性下执行多机器人LTL规划的工具 MAPmAKER是一个规划解决方案, 它基于去中心化算法 考虑时间逻辑中给出的复杂的高级任务 当只有部分环境知识可用时,此方法才有效。 作者 克劳迪奥...
Mapmaker JS 库 规格 一个全局对象Mapmaker ,可用于从map生成mapView 一个mapView包括 输入:能够为map 、 metacodeSet和metacodes PERSISTING:可以通过 Backbone 模型SAVE输出 JSON,用于topic 、 synapse 、 ...
使用基于柏林噪声的 p5.js 制作的 2D RPG 随机地图生成器