缓存架构
有很多种对象缓存架构(包括开放源代码的和商业的实现)在servlet容器和应用服务器中提供了分布式缓存。下面列出了一些现在可以使用的缓存框架:
开放源代码项目
- 来自于Jakarta的Java Caching System (JCS) (属于Turbine项目的一部分)
- OSCache
- Commons Collections (另一个Jakarta 项目)
- JCache API (SourceForge.net)
商业项目
- SpiritCache (来自于 SpiritSoft).
- Coherence (Tangosol)
- Javlin (eXcelon)
- Object Caching Service for Java (Oracle)
如果你还有兴趣了解更多的缓存实现,本文最后的资源一节提供了所有这些框架的URL。
我在最初开始我对能满足我们所有的缓存需求的框架进行研究的时候,我先看到了Commons Collections 和 Java Caching System API 。我在最开始评估的主要标准就是容易使用、容易扩展,以及软件的成本。这两个框架都是开放源代码的,并且都来自于Apache Jakarta项目。
Commons Collections
Commons Collections API 以一个Java类的形式提供了对象缓存算法,名称为LRUMap。如果你对缓存只有基本的需求,并且不是真正需要很多的扩展和缓存配置功能,那么Commons Collections 可能是一个不坏的选择,但不是作为一个企业级缓存系统的正确选择。如果你选择Common Collections来实现对象缓存,你将会手工定义/配置所有的缓存参数,如:最大缓存对象的数量,一个缓存对象的最长生命周期,刷新缓存或检查对象新鲜的中断时间等。
Java Caching System
Java Caching System (JCS), Jakarta Turbine 项目的一部分, 与Commons Collections相比更有成熟、更具扩展性。通过为频繁访问的对象维护动态对象池的方法,它提供了提升整个系统性能的灵活、可配置的解决方案。就像在它的网站上提到的,JCS 已经超越了简单地在内存中缓存对象的范围。它为一个企业级的缓存系统提供了许多必需的重要功能:
- 内存管理
- Disk overflow (和重整)
- 元素分组
- 快速嵌套地移除
- 数据期限管理
- 可扩展的框架
- 完全可配置的运行时参数
- 远程同步
- 远程存储恢复
- 通过HTTP、TCP或者UDP协议实现可选的横向分布元素。
JCS 提供了无故障点的框架, 允许完全的session失败转移(在集群环境中),包括支持最多到256个服务器的session数据分布。它也提供了配置一个或多个数据存储选项的灵活性,例如:内存缓存、磁盘缓存,或者在远程机器上的缓存。
所有这些包括在JCS中的优秀功能让它成为满足我们的web门户项目的一个优秀的对象缓存产品选择
使用JCS构造Web 门户缓存框架
缓存框架的目标
在我开始设计对象缓存框架之前,我首先列出了在新的框架中需要达到的目标。以下就是目标的列表:
- 在web门户应用中快速访问频繁使用的数据。
- 将缓存中类型类似的对象进行组合。
- 提供可配置的缓存管理,以便我可以通过描述方式而不是编码方式修改参数。
- 提供可靠的和可扩展的框架,以便我将来可以转换到其它第三方的缓存API。
- 可以生成统计数据来监测缓存的效率,以及使用数据缓存后应用性能的提升效果。
安装和配置
在web应用中安装和配置JCS是非常简单的事情。从Jakarta Turbine网站下载压缩文件,解压缩文件到临时目录,并拷贝JSC.jar文件(jcs-1.0-dev.jar)到servlet容器的通用目录(在我的web应用中使用的servlet容器是Tomcat,通用目录在windows下就是%TOMCAT_HOME%/common/lib,在再Unix类型的系统下就是$TOMCAT_HOME/common/lib)。你可能还需要commons-collections.jar, commons-lang.jar, 和 commons-logging.jar 这些文件存在于web应用的类路径下以便使用JCS。
对象缓存框架的主要原理在图1和图2的UML图中展示出来了