Tim's Blog about XMPP Jabber, 同时欢迎访问我的另一独立blog: http://timyang.net/
查看文章 |
一种Java快速本地cache实现方法
2008-07-30 23:57
前几个月曾经做个一次 比较Java中几种数据cache方式 的试验,最近看到 Openfire 中有一个非常小巧的本地 Cache实现, 在相同环境测试比流行的ehcache快大约5倍。简单介绍如下。 原理图 ![]() 实现方法 * 用 HashMap 来存储和用来做 CacheKey 查找。 * 用一个LinkedList来存储访问顺序列表 * 用一个LinkedList来存储添加时间顺序列表,即过期时间。 * HashMap 中 Key 为 CacheKey, Value 包装成一个CacheObject * CacheObject 包含: 1) object size 2) 指向 Access List 节点的指针 3) 指向 Age List 节点的指针 其中两个List的作用 1) AccessList 当添加新元素且 List 满时,删除列表最后的元素,即最长时间没有访问的元素。 2) AgeList 当调用 get cache 时候,判断 List 末尾有无过期元素,如有向前一直删除到最后一个没有过期的元素为止。 Performance 性能评测 写了个简单的测试,2线程写 Cache, 4 线程同时读Cache,每个Cache 100字节,平均速度大致为 写cache: 168,924 条/秒 读cache: 605,212 次/秒 结果在相同环境测试比流行的ehcache快大约5倍。 Resource资源下载 DefaultCache 源代码,稍修改去掉没用的引用即可独立使用。 |
最近读者:
