百度空间 | 百度首页 
               
 
查看文章
 
一种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 源代码,稍修改去掉没用的引用即可独立使用。

类别:高性能服务器 | 添加到搜藏 | 浏览() | 评论 (6)
 
最近读者:
 
网友评论:
1
2008-07-31 01:27 | 回复
与OSCache比呢? oscache性能是不错的。
 
2
2008-07-31 13:24 | 回复
博主牛人啊,在广东什么地方啊?我也刚到深圳。你不会是腾讯的吧?
 
3
2008-07-31 19:47 | 回复
腾讯有程序员吗?
 
4
2008-08-01 11:21 | 回复
谁知道腾讯的IM服务器是用什么语言开发的吗?C, C++还是java啊?
 
5
2008-08-18 18:04 | 回复
就是,别埋汰博主了
 
6
2008-09-01 02:20 | 回复
Mark
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu