`
85977328
  • 浏览: 1898941 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

本地缓存(一)ehcache/jcs/cache4j/jcs的性能测试与使用场景分析

 
阅读更多

前言

        之前在网上看过几篇本地缓存的性能测试,但只看到了一个结果,没有看到具体测试的方案和使用场景。因此猫头哥放假期间,整理了一份阅兵版的缓存性能分析。另外朋友们需要脱离一个认知误区,就是不要拿本地缓存和分布式缓存做比较。localcache的作用,是解决分布式缓存节点过热问题,作为L1 cache挡在分布式缓存的前面。

 

        关于测试过程中,要注意以下几个事项:

  • 环境仿真度:关闭占用CPU的无用软件,保持CPU是0%使用,笔者机器上有浏览器、360、赛肽客驱动等等;代码中用栅栏,让与缓存无关的数据提前运行准备;
  • 多线程测试:不要做单线程的循环,一次存取基本意义不大,互联网架构都是高并发场景才会使用缓存;
  • 测试场景:分为:插入、miss、hit几个场景;
  • 性能优化:针对不同的缓存组件,要做性能优化,比如oscache的blocking设置不同,性能是不一一样的;
  • 场景分析:不要只说哪个性能好,哪个性能坏。其实不同的场景是有区别的,没有绝

测试数据

在4C的PC上运行(I5-3230),单位:毫秒

最新版本

Ehcache_2.10.0

oscache_2.4.1

jcs_1.3

cache4j_0.4

4线程插入100W

6093

2828

2489

1460

32线程插入100W

6989

2161

blocking=false

2143

2424

4线程读取(hit)100W

862

575

253

820

32线程读取(hit)100W

490

573

323

846

4线程读取(miss)100W

965

1225

166

68

32线程读取(miss)100W

421

1325

182

97

组件代码量

极多

极少

组件丰富度

★★★★★

★★★

功能

★★★★★

★★★★

★★

最后更新

2015.4.2

2011.1.11

2007.5.30

2006.2.23

echache的多线程插入性能最差。oscache的插入性能最好,因为oscache开启了cache.blocking=false,也就是异步插入,但会导致很多读取未命中,对强一致性有要求的可以开启。作为内存缓存,没有业务场景会有这么大的插入量。

从命中读取上看,jcs表现最好,其他的读取性能区别都不明显,都是1秒以内。而ehcache的多线程读取以后,读取能力有一定的提高,非常适合高并发的web应用,oscache的多线程读取稳定性能也是非常棒。

未命中的情况下,可以看到,cache4j的表现最好,ehcache、jcs的表现也没有落后太多,完全在可接受范围内。而oscache表现的略微差一点点。既然使用了缓存,缓存命中率应该保持在90%以上才叫缓存,因此此项性能影响也不是特别大。

ehcache和oscache都是大型缓存组件,对web都支持的非常好。尤其ehcache持续更细,2009被兵马俑(terracotta)收购后,集成缓存功能更是强大。ehcache一直保持更新。 oscahce的更和社区支持,稍微差了一点,已经有将近4年没有更新。

以上性能测试报告的结果说明,插入性能、未命中的性能差距并不是特别明显。命中率读取除了JCS以外其他缓存差距并不大。如果只是为了使用增加个失效时间的map,那jcs是最好的;如果只是想用个最简单的缓存组件,尽量减少代码,那cache4j是首选;如果考虑强大的扩展性和web支持,那肯定要选择ehcache或则oscache。但是oscache有一个致命缺陷,就是从2011年开始,已经有4年没有进行更新。

 

综合来看ehcache的多线程命中读取性能、web支持、分布式集成、社区支持程度、更新的速度、应用的广泛程度。作为缓存的不二选择。

不足

        欢迎朋友们继续深入研究,把研究结果分享出来,我们一起进步。后续猫头哥会把本次测试中的不足逐渐完善。测试结果和网上传出的参考文章,基本一致。文章绝对原创,彼此尊重劳动成果,转载请注明出处。

  • 代码运行环境,应该在linux下最好
  • 测试用例代码冗余较多,没有进行设计
  • 测试用例没有长期运行,只是运行了3-5次,取了成绩最好的数据

参考文章

 

http://www.jdon.com/37031

http://sourceforge.net/projects/cache4j/

更新历史

2015-09-05

整理初稿

分享到:
评论

相关推荐

    shiftone-cache swarmcache ehcache jcs 源码

    本文将深入探讨四种知名的缓存解决方案:ShiftOne Cache、SwarmCache、EHCache以及JCS(Java Caching System),并分析它们的源码,以理解其工作原理和优化策略。 首先,让我们来看看ShiftOne Cache。这是一个轻量...

    一个简单jcs实例,一看就会的程序

    Java Cache System(JCS)是一个开源的、基于内存的分布式缓存系统,主要用来提高应用程序的性能和响应速度。在大型分布式系统中,通过缓存关键数据,可以显著减少数据库的访问压力,从而提升整体系统的处理能力。...

    JCS1.3开源的缓存架构

    1. **与 Ehcache 比较**:Ehcache 是一个广泛使用的 Java 缓存框架,侧重于内存缓存,而 JCS 在分布式缓存方面更加强大。 2. **与 Redis 比较**:Redis 是一个内存数据结构存储系统,功能更全面,但 JCS 更专注于 ...

    ehcache缓存

    Ehcache是一个开源的、广泛使用的Java缓存解决方案,它为高性能应用程序提供了本地内存缓存功能。在Java世界中,Ehcache被设计用来提高数据访问速度,减少数据库负载,从而提升整体应用性能。本文将深入探讨Ehcache...

    JAVAWEB缓存技术

    6. **其他缓存技术**:除了OSCache和JCS,JAVAWeb还有其他缓存技术,如Hibernate的二级缓存、 Ehcache、Guava Cache等,它们各有特点,适应不同的场景。 总的来说,JAVAWeb缓存技术的选型和使用是一项复杂而重要的...

    jar包-spring-modules-cache.jar

    总之,`spring-modules-cache.jar`中的Spring Modules Cache是Spring框架的一个强大补充,它简化了缓存的管理和使用,帮助开发者构建高性能、易维护的Java应用。无论是在单体应用还是微服务架构中,这个库都能发挥...

    Java缓存讨论.pdf

    最后,cache4j提供了一个简单API的快速Java对象缓存,支持多种缓存清除策略,如LFU、LRU和FIFO,并可以选择使用强引用或软引用。 这些缓存框架各有优势,开发者应根据项目需求选择合适的缓存解决方案。例如,如果...

    Java中各类Cache机制实现解决方案

    **EHCache** 是一个广泛使用的高性能、轻量级的Java缓存库。最初是为了配合Hibernate 2.1版本而设计的,但现在已经被许多项目采用作为通用的缓存解决方案。EHCache支持多种缓存模式,包括本地缓存、分布式缓存等,...

    java中的缓存.pdf

    总结起来,文档深入探讨了Java中缓存技术的多个方面,包括Hibernate框架中的缓存使用、不同缓存策略的实现、本地缓存与分布式缓存的区别和配置、以及Java缓存技术在企业应用中的实际应用。这些知识对于Java开发者来...

    memory cache

    【内存缓存(Memory Cache)】在Java的内存管理中,内存缓存是一种优化策略,它的目的是减少对数据库或其他外部资源的访问,从而提高应用程序的性能。内存缓存利用计算机的内存来存储常用数据,使得数据获取速度比...

    cachet:抽象缓存框架 - 支持 Ehcache、Infinispan 和 Memcached 库

    徽章 ====== 抽象缓存框架####特征 : 提供用于缓存的包装器(如用于日志记录的 slf4j)。 支持 Ehcache、Infinispan 和 Memcached 缓存库。 ####目标: 为现有的缓存框架(如 JCS 和 Hazelcast)提供支持。 为...

    毕业设计进展汇报ppt

    5. 典型的缓存框架:EHcache、Jbosscache、OSCache、JCS、Tangosol Coherence等。 6. 缓存框架的实现:使用JAVA语言,关系数据库,WebSphere Server等技术,实现缓存框架。 7. 缓存框架的测试结果:测试了写入内存...

    Java认证:各类Cache机制的实现方法

    OSCache 是一款广泛使用的高性能Java EE缓存框架,适用于任何Java应用程序。它的特点包括: - **灵活的缓存对象**:允许缓存任何类型的数据,如JSP页面、HTTP请求或Java对象。 - **全面的API**:提供了丰富的API供...

    《自己动手写前端框架》电子书.pdf

    电子书还涉及了一些与开发环境有关的话题,例如在Linux下搭建Tiny开发环境、如何重构SmartAdmin来展示TinyUI、在Tiny框架中引入缓存解决方案如EhCache和JCS,以及如何利用Tiny框架中的组件来进行Web界面开发等。...

    rapidpm-binarycache

    这是一个如何使用REST和Hazelcast生成缓存的示例: 禁用默认配置文件binarycache-provider-ehcache 启用配置文件binarycache-proivder-hazelcast 检查binarycache-connect-rest配置文件是否仍处于活动状态 对...

Global site tag (gtag.js) - Google Analytics