Ehcache原理具体解读

计算机软件开发 2024-9-27 20:46:01 143 0 来自 中国
1 Ehcache

Ehcache是如今最盛行的纯Java开源缓存框架,设置简单、结构清楚、功能强盛,最初知道它,是从Hibernate的缓存开始的。网上中文的EhCache质料以简单介绍和设置方法居多,对于API,官网上介绍已经非常清楚,请拜见官网;但是很少见到特性阐明和对实现原理的分析,因此在这篇文章内里,具体介绍和分析EhCache的特性,加上一些自己的明白和思索,渴望对缓存感爱好的朋侪有所劳绩。
1.1 特性

1.1.1 快速轻量

已往几年,诸多测试表明Ehcache是最快的Java缓存之一。
Ehcache的线程机制是为大型高并发体系计划的。
大量性能测试用例包管Ehcache在差别版本间性能表现得同等性。
很多用户都不知道他们正在用Ehcache,由于不必要什么特殊的设置。
API易于使用,这就很轻易摆设上线和运行。
很小的jar包,Ehcache 2.2.3才668kb。
最小的依靠:唯一的依靠就是SLF4J了。
1.1.2 伸缩性

缓存在内存和磁盘存储可以伸缩到数G,Ehcache为大数据存储做过优化。
大内存的环境下,全部进程可以支持数百G的吞吐。
为高并发和大型多CPU服务器做优化。
线程安全和性能总是一对抵牾,Ehcache的线程机制计划采取了Doug Lea的想法来得到较高的性能。
单台捏造机上支持多缓存管理器。
通过Terracotta服务器矩阵,可以伸缩到数百个节点。
1.1.3 灵活性

Ehcache 1.2具备对象API接口和可序列化API接口。
不能序列化的对象可以使用除磁盘存储外Ehcache的全部功能。
除了元素的返回方法以外,API都是同一的。只有这两个方法差别等:getObjectValue和getKeyValue。这就使得缓存对象、序列化对象来获取新的特性这个过程很简单。
支持基于Cache和基于Element的逾期战略,每个Cache的存活时间都是可以设置和控制的。
提供了LRU、LFU和FIFO缓存镌汰算法,Ehcache 1.2引入了最少使用和先辈先出缓存镌汰算法,构成了完整的缓存镌汰算法。
提供内存和磁盘存储,Ehcache和大多数缓存办理方案一样,提供高性能的内存和磁盘存储。
动态、运行时缓存设置,存活时间、空闲时间、内存和磁盘存放缓存的最大数目都是可以在运行时修改的。
1.1.4 标准支持

Ehcache提供了对JSR107 JCACHE API最完整的实现。由于JCACHE在发布从前,Ehcache的实现(如net.sf.jsr107cache)已经发布了。
实现JCACHE API有利于到将来其他缓存办理方案的可移植性。
Ehcache的维护者Greg Luck,正是JSR107的专家委员会委员。
1.1.5 可扩展性

监听器可以插件化。Ehcache 1.2提供了CacheManagerEventListener和CacheEventListener接口,实现可以插件化,而且可以在ehcache.xml里设置。
节点发现,冗余器和监听器都可以插件化。
分布式缓存,从Ehcache 1.2开始引入,包罗了一些权衡的选项。Ehcache的团队信赖没有什么是万能的设置。
实现者可以使用内建的机制大概完全自己实现,由于有完整的插件开发指南。
缓存的可扩展性可以插件化。创建你自己的缓存扩展,它可以持有一个缓存的引用,而且绑定在缓存的生命周期内。
缓存加载器可以插件化。创建你自己的缓存加载器,可以使用一些异步方法来加载数据到缓存内里。
缓存非常处置处罚器可以插件化。创建一个非常处置处罚器,在非常发生的时间,可以实行某些特定操纵。
1.1.6 应用长期化

在VM重启后,长期化到磁盘的存储可以复原数据。
Ehcache是第一个引入缓存数据长期化存储的开源Java缓存框架。缓存的数据可以在呆板重启后从磁盘上重新得到。
根据必要将缓存刷到磁盘。将缓存条目刷到磁盘的操纵可以通过cache.flush()方法来实行,这大大方便了Ehcache的使用
1.1.7 监听器

缓存管理器监听器。答应注册实现了CacheManagerEventListener接口的监听器:

  • notifyCacheAdded()
  • notifyCacheRemoved()
缓存变乱监听器。答应注册实现了CacheEventListener接口的监听器,它提供了很多对缓存变乱发生后的处置处罚机制:
notifyElementRemoved/Put/Updated/Expired
1.1.8 开启JMX

Ehcache的JMX功能是默认开启的,你可以监控和管理如下的MBean:
CacheManager、Cache、CacheConfiguration、CacheStatistics
1.1.9 分布式缓存

从Ehcache 1.2开始,支持高性能的分布式缓存,兼具灵活性和扩展性。
分布式缓存的选项包罗:

  • 通过Terracotta的缓存集群:设定和使用Terracotta模式的Ehcache缓存。缓存发现是主动完成的,而且有很多选项可以用来调试缓存举动和性能。
    使用RMI、JGroups大概JMS来冗余缓存数据:节点可以通过多播或发现者手动设置。状态更新可以通过RMI毗连来异步大概同步完成。
  • Custom:一个综合的插件机制,支持发现和复制的本事。
    可用的缓存复制选项。支持的通过RMI、JGroups或JMS举行的异步或同步的缓存复制。
  • 可靠的分发:使用TCP的内建分发机制。
  • 节点发现:节点可以手动设置大概使用多播主动发现,而且可以主动添加和移除节点。对于多播壅闭的环境下,手动设置可以很好地控制。
    分布式缓存可以恣意时间参加大概脱离集群。缓存可以设置在初始化的时间实行引导步调员。
    BootstrapCacheLoaderFactory抽象工厂,实现了BootstrapCacheLoader接口(RMI实现)。
    缓存服务端。Ehcache提供了一个Cache Server,一个war包,为绝大多数web容器大概是独立的服务器提供支持。
  • 缓存服务端有两组API:面向资源的RESTful,尚有就是SOAP。客户端没有实现语言的限定。
  • RESTful缓存服务器:Ehcached的实现严格依照RESTful面向资源的架构风格。
  • SOAP缓存服务端:Ehcache RESTFul Web Services API袒露了单例的CacheManager,他能在ehcache.xml大概IoC容器内里设置。
    标准服务端包罗了内嵌的Glassfish web容器。它被打成了war包,可以恣意摆设到支持Servlet 2.5的web容器内。Glassfish V2/3、Tomcat 6和Jetty 6都已经颠末了测试。
1.1.10 Java EE和应用缓存

为寻常缓存场景和模式提供高质量的实现。

  • 壅闭缓存:它的机制制止了复制进程并发操纵的标题。
    SelfPopulatingCache在缓存一些开销昂贵操纵时显得特殊有用,它是一种针对读优化的缓存。它不必要调用者知道缓存元素怎样被返回,也支持在不壅闭读的环境下刷新缓存条目。
  • CachingFilter:一个抽象、可扩展的cache filter。
  • SimplePageCachingFilter:用于缓存基于request URI和Query String的页面。它可以根据HTTP request header的值来选择采取大概不采取gzip压缩方式将页面发到欣赏器端。你可以用它来缓存整个Servlet页面,无论你采取的是JSP、velocity,大概其他的页面渲染技能。
  • SimplePageFragmentCachingFilter:缓存页面片断,基于request URI和Query String。在JSP中使用jsp:include标签包罗。
    已经使用Orion和Tomcat测试过,兼容Servlet 2.3、Servlet 2.4规范。
  • Cacheable下令:这是一种老的下令行模式,支持异步举动、容错。
    兼容Hibernate,兼容Google App Engine。
    基于JTA的变乱支持,支持变乱资源管理,二阶段提交和回滚,以及本地变乱
1.2 模块列表

Ehcache的加载模块列表,他们都是独立的库,每个都为Ehcache添加新的功能 :

  • ehcache-core:API,标准缓存引擎,RMI复制和Hibernate支持
  • ehcache:分布式Ehcache,包罗Ehcache的核心和Terracotta的库
  • ehcache-monitor:企业级监控和管理
  • ehcache-web:为Java Servlet Container提供缓存、gzip压缩支持的filters
  • ehcache-jcache:JSR107 JCACHE的实现
  • ehcache-jgroupsreplication:使用JGroup的复制
  • ehcache-jmsreplication:使用JMS的复制
  • ehcache-openjpa:OpenJPA插件
  • ehcache-server:war内摆设大概单独摆设的RESTful cache server
  • ehcache-unlockedreadsview:答应Terracotta cache的无锁读
  • ehcache-debugger:记载RMI分布式调用变乱
  • Ehcache for Ruby:Jruby and Rails支持
Ehcache的结构计划概览:

1.png 1.3 核心界说

核心界说 :

  • cache manager:缓存管理器,从前是只答应单例的,不外如今也可以多实例了
  • cache:缓存管理器内可以放置若干cache,存放数据的实质,全部cache都实现了Ehcache接口
  • element:单条缓存数据的构成单元
  • system of record(SOR):可以取到真实数据的组件,可以是真正的业务逻辑、外部接口调用、存放真实数据的数据库等等,缓存就是从SOR中读取大概写入到SOR中去的。
代码示例:
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-2-6 08:42, Processed in 0.184425 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表