免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2761 | 回复: 0
打印 上一主题 下一主题

比较Java中几种数据cache方式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-14 23:46 |只看该作者 |倒序浏览

现在很多网站一说到cache就想到memcached,memcached确实是非常优秀的系统,但是在某些场合,特别在不是分布式应用的场合,或者某些数据不需要分布式的访问,那它就未必是最佳的选择。
下面比较3种cache方式,用测试结果说话

  • Map,严格的说不能算cache,它适合本机访问,没有过期时间,不适合大容量,不能预计长度的数据,可能会使内存耗尽。
  • ehcache,可设过期时间,当超过指定内存数量,可设置淘汰算法,可输出到磁盘,可适合本机访问,也适合用作分布式缓存,分布式缓存配置和原理稍复杂,没有memcached直观,本测试未使用ehHcache分布式支持。
  • Memcached, 适合分布式缓存,可设过期时间

1. 环境
OS: Linux, Ubuntu 7.04 64-bit
Memory: 4G
CPU: Intel(R) Pentium(R) D CPU 2.66GHz
SCSI DISK, ext3 file system
libevent 1.3e
Memcached 1.2.4
Java 1.6.0
2. 测试方法
Key: 数字,1~100万
数据:100字节字符串
// put 100 char
    Element e = new Element(String.valueOf(n), "blah.....blah... 100 chars...");
    cache.put(e);
Memcache的设置方法参看
memcachedb的性能测试
3. ehcache 设置
4. 测试结果
类型
测试数据
平均速度(次/秒)
最大速度(次/秒)
占用内存
Thread(s)
HashMap.put*
1千万
146,268
254,262
1344.18MB
1*
Hashtable.put
1千万
128,752
253,911
1572.52MB
4
EHCache.put
1千万
118,399
381,601
1245.08MB
4
Memcached.put
1百万
16,515
19,942
118.20MB
4
* HashMap 不是线程安全,多线程测试无意义。
* 未比较GET测试结果,由于GET测试先要模拟一定数据,用空表去测试GET结果可能无意义。(但是GET比较可能更重要,有时间补上)
本文地址为:
http://hi.baidu.com/jabber
参考资源:NP博士的文章PHP cache的比较
《大型》系列(三)——Cache & Buffer
补充:
写完几天之后无意在网上看到这两篇文章:一正一反,
正方:
Comparing Memcached and Ehcache Performance
说ehcache要快50~100倍

反方:
Unfair Benchmarks of Ehcache vs Memcached
,貌似国内访问不到,里面意思是说要用memcached的getmulti方式测试比较才公平。另外担心ehcache中LRU算法GC不能回收内存。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86974/showart_2094803.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP