现在很多网站一说到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 设置
<cache name="cache1" maxElementsInMemory="1000000" eternal="true" overflowToDisk="false" timeToIdleSeconds="36000" timeToLiveSeconds="36000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />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不能回收内存。
分享到:
相关推荐
分布式缓存框架SwarmCache是Java编程领域中的一个重要工具,尤其对于处理大数据量和高并发的应用场景,它能显著提高应用程序的性能。本压缩包包含了SwarmCache的源码和其他必要的依赖库,使得开发者可以深入理解其...
Hibernate是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以将数据库表映射到Java对象,从而实现数据的增删查改操作而无需编写复杂的SQL语句。Hibernate还...
分布式缓存框架 SwarmCache 是一个专门用于解决大型分布式系统中数据缓存问题的开源软件。在高并发和大数据量的场景下,传统的单机缓存往往无法满足性能需求,因此分布式缓存应运而生。SwarmCache 以其高效、稳定和...
SSM(Spring、SpringMVC、Mybatis)框架是Java Web开发中常用的一种组合,它在提高开发...在阅读和实践这个"SSM笔记-缓存"的过程中,你将能够全面了解Mybatis缓存的各个方面,并具备在实际项目中运用这些知识的能力。
理论上,Web分层设计的各个层都可以有缓存,Web中的任何对象都可以成为缓存的对象。例如: - **HTTP请求结果的缓存**:如页面数据或API响应。 - **浏览器缓存**:客户端的缓存机制。 - **代理缓存**:位于客户端与...
ZooKeeper被设计为一个高性能的分布式协调服务框架,可以管理分布式环境中各个缓存服务器之间的共享状态数据,以支持分布式缓存系统的稳定运行。ZooKeeper本质上是一个分布式的小文件存储系统,可以维护和协调分布式...
在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是数据库数据的副本,当需要查询数据...
- **模块化**:该框架采用模块化设计,各个功能模块之间相互独立,便于进行功能扩展和代码复用。 - **MVC模式**:遵循Model-View-Controller设计模式,分离业务逻辑、数据处理和用户界面,提升代码组织性。 - **...
Dubbo 和 Zookeeper 结合使用的缓存方案是分布式系统中常见的设计,主要目的是解决多节点环境下数据一致性的问题,确保在各个节点之间的缓存能够实时同步更新。以下将详细阐述这个方案的具体实现、工作原理以及其...
- **统一的技术栈**:SSH框架提供了一套完整的解决方案,覆盖了从视图层到业务逻辑层再到数据访问层的各个环节。 - **良好的可扩展性**:由于各层之间采用了松耦合的设计思想,因此很容易添加新的功能或替换现有的...
***框架内置了多种缓存机制,能够帮助开发者显著提升网站响应速度和处理能力。在深入探讨***缓存技术之前,先了解缓存的基本概念至关重要。 缓存是一种临时存储技术,它将频繁使用的数据保存在内存等高速访问的存储...
在Java的ORM框架Hibernate中,缓存机制是提高应用程序性能的重要手段。Hibernate提供了两级缓存,分别是:一级缓存和二级缓存,以及一种特殊的QueryCache。 1. 一级缓存(Session级缓存) 一级缓存在Hibernate中被...
然而,熟悉和掌握框架的使用需要时间和实践,建议开发者阅读官方文档,参与社区讨论,通过创建小型项目来逐步熟悉框架的各个部分。 总之,JCAT PHP框架是一个针对网络软件开发的优秀选择,它结合了PHP的强大功能和...
这五个思维导图分别详细描绘了SSM框架的各个组成部分以及它们之间的关系,对于理解和学习SSM框架具有极大的帮助。 1. **Spring框架**:Spring是Java企业级应用的核心框架,它提供了依赖注入(Dependency Injection,...
官方文档详尽介绍了框架的各个方面,社区则提供了丰富的经验和问题解答。 总结,Yii框架作为PHP开发的利器,凭借其高效、灵活和组件化的特性,成为了许多开发者的选择。无论是在新项目还是维护旧项目中,熟悉并掌握...
【Hibernate缓存管理】是数据库持久化框架Hibernate中优化性能的关键技术。缓存的主要目的是减少对数据库的直接访问,提高应用程序的运行效率。缓存的数据是数据库中数据的副本,存在于内存或硬盘中,便于快速读取。...
ehcache 是一款开源的高性能 Java 缓存框架,广泛应用于 Java 应用程序中,用于提高应用程序性能。通过在内存或磁盘中存储数据副本,ehcache 可以减少数据库访问次数,从而降低系统延迟并提高响应速度。 #### 二、...
- **IoC**:Spring的依赖注入如何在各个组件之间管理对象。 - **持久层优化**:Hibernate的查询优化,如HQL、Criteria API的使用,以及二级缓存的配置。 - **异常处理**:如何定义全局异常处理,提高系统稳定性。 - ...
SSH框架,全称为Spring、Struts2和Hibernate,是Java Web开发中常用的一套集成解决方案。...这份笔记内容广泛,包括各个框架的主要概念、配置、API使用、实战案例等,对于提升Java开发技能大有裨益。