没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
23页
Ehcache是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大,最初知道它,是从Hibernate的缓存开始的。网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面的问题,请自行google;对于API,官网上介绍已经非常清楚,请参见官网;但是很少见到特性说明和对实现原理的分析,因此在这篇文章里面,我会详细介绍和分析EhCache的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。
资源推荐
资源详情
资源评论
Ehcache 是现在最流行的纯 Java 开源缓存框架,配置简单、结构清晰、功能强大,最初知
道它,是从 Hibernate 的缓存开始的。网上中文的 EhCache 材料以简单介绍和配置方法居
多,如果你有这方面的问题,请自行 google;对于 API,官网上介绍已经非常清楚,请参
见官网;但是很少见到特性说明和对实现原理的分析,因此在这篇文章里面,我会详细介绍
和分析 EhCache 的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。
一、特性一览,来自官网,简单翻译一下:
1、快速轻量
过去几年,诸多测试表明 Ehcache 是最快的 Java 缓存之一。
Ehcache 的线程机制是为大型高并发系统设计的。
大量性能测试用例保证 Ehcache 在不同版本间性能表现得一致性。
很多用户都不知道他们正在用 Ehcache,因为不需要什么特别的配置。
API 易于使用,这就很容易部署上线和运行。
很小的 jar 包,Ehcache 2.2.3 才 668kb。
最小的依赖:唯一的依赖就是 SLF4J 了。
2、伸缩性
缓存在内存和磁盘存储可以伸缩到数 G,Ehcache 为大数据存储做过优化。
大内存的情况下,所有进程可以支持数百 G 的吞吐。
为高并发和大型多 CPU 服务器做优化。
线程安全和性能总是一对矛盾,Ehcache 的线程机制设计采用了 Doug Lea 的想法来获得较
高的性能。
单台虚拟机上支持多缓存管理器。
通过 Terracotta 服务器矩阵,可以伸缩到数百个节点。
3、灵活性
Ehcache 1.2 具备对象 API 接口和可序列化 API 接口。
不能序列化的对象可以使用除磁盘存储外 Ehcache 的所有功能。
除了元素的返回方法以外,API 都是统一的。只有这两个方法不一致:getObjectValue 和
getKeyValue。这就使得缓存对象、序列化对象来获取新的特性这个过程很简单。
支持基于 Cache 和基于 Element 的过期策略,每个 Cache 的存活时间都是可以设置和控制
的。
提供了 LRU、LFU 和 FIFO 缓存淘汰算法,Ehcache 1.2 引入了最少使用和先进先出缓存淘
汰算法,构成了完整的缓存淘汰算法。
提供内存和磁盘存储,Ehcache 和大多数缓存解决方案一样,提供高性能的内存和磁盘存
储。
动态、运行时缓存配置,存活时间、空闲时间、内存和磁盘存放缓存的最大数目都是可以在
运行时修改的。
4、标准支持
Ehcache 提供了对 JSR107 JCACHE API 最完整的实现。因为 JCACHE 在发布以前,
Ehcache 的实现(如 net.sf.jsr107cache)已经发布了。
实现 JCACHE API 有利于到未来其他缓存解决方案的可移植性。
Ehcache 的维护者 Greg Luck,正是 JSR107 的专家委员会委员。
5、可扩展性
监听器可以插件化。Ehcache 1.2 提供了 CacheManagerEventListener 和
CacheEventListener 接口,实现可以插件化,并且可以在 ehcache.xml 里配置。
节点发现,冗余器和监听器都可以插件化。
分布式缓存,从 Ehcache 1.2 开始引入,包含了一些权衡的选项。Ehcache 的团队相信没
有什么是万能的配置。
实现者可以使用内建的机制或者完全自己实现,因为有完整的插件开发指南。
缓存的可扩展性可以插件化。创建你自己的缓存扩展,它可以持有一个缓存的引用,并且绑
定在缓存的生命周期内。
缓存加载器可以插件化。创建你自己的缓存加载器,可以使用一些异步方法来加载数据到缓
存里面。
缓存异常处理器可以插件化。创建一个异常处理器,在异常发生的时候,可以执行某些特定
操作。
6、应用持久化
在 VM 重启后,持久化到磁盘的存储可以复原数据。
Ehcache 是第一个引入缓存数据持久化存储的开源 Java 缓存框架。缓存的数据可以在机器
重启后从磁盘上重新获得。
根据需要将缓存刷到磁盘。将缓存条目刷到磁盘的操作可以通过 cache.flush()方法来执行,
这大大方便了 Ehcache 的使用。
7、监听器
缓存管理器监听器。允许注册实现了 CacheManagerEventListener 接口的监听器:
notifyCacheAdded()
notifyCacheRemoved()
缓存事件监听器。允许注册实现了 CacheEventListener 接口的监听器,它提供了许多对缓
存事件发生后的处理机制:
notifyElementRemoved/Put/Updated/Expired
8、开启 JMX
Ehcache 的 JMX 功能是默认开启的,你可以监控和管理如下的 MBean:
CacheManager、Cache、CacheConfiguration、CacheStatistics
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 都已经经过了测试。
10、搜索
标准分布式搜索使用了流式查询接口的方式,请参阅文档。
11、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 的事务支持,支持事务资源管理,二阶段提交和回滚,以及本地事务。
12、开源协议
Apache 2.0 license
二、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 的结构设计概览:
三、核心定义:
cache manager:缓存管理器,以前是只允许单例的,不过现在也可以多实例了
cache:缓存管理器内可以放置若干 cache,存放数据的实质,所有 cache 都实现了 Ehcache
接口
element:单条缓存数据的组成单位
system of record(SOR):可以取到真实数据的组件,可以是真正的业务逻辑、外部接口
调用、存放真实数据的数据库等等,缓存就是从 SOR 中读取或者写入到 SOR 中去的。
代码示例:
剩余22页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1899
- 资源: 3860
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- STM8L101F3P6单片机+CC1100模块433M遥控器设计硬件(原理图+PCB)工程文件.zip
- 上传下载铁人下载系统 Liuxing 1.0-liuxing1.0.rar
- 南京邮电大学数学实验实力雄厚,凭借其优秀的师资力量、丰富的实践教学资源和卓越的科研成果,成为国内一流的数学实验教学和科研基地
- 【火爆朋友圈的今天吃什么源码 v1.0】随机的为用户带来每一天的用餐选择和推荐.rar
- MPU6050中文版数据手册
- 上传下载手机电影下载-mobiledy.rar
- 响应式旅游网站源码下载 马尔代夫旅游网站.rar
- CMS小涴熊漫画连载系统漫画网站源码 带采集API.rar
- 福袋点点.apk
- 基于STM32的电子秤采用0.96寸OLED显示UI界面源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功