? ?Web开发人员通过Java的缓存功能可以方便快捷的改善应用程序的性能。对于java应用程序来说,一个强大的分布式Java缓存系统(JCS),是用简单的API就可以进行高度配置的工具。这篇文章概要的介绍了JCS,并且展示了怎样用它为Web应用程序提速。
?
? 很多的桌面应用程序正在被重写成Web应用程序,理想情况下,被重写后的应用程序应该和桌面版本的应用程序一样快捷并且具有可伸缩性。几乎所有的Web应用都可以通过JCS在速度方面获得大幅提高。经常性的缓存那些很少改变的的数据是减少用户等待时间的非常好的方法,用简单的API处理缓存数据的功能能够帮助我们实现这个目标。开源的JCS(Apache Jakarta?工程)就是这样的一个工具,这篇文章解释怎样配置和使用JCS来为Web应用程序缓存数据。
?
JCS概要
?
JCS是一个用Java语言编写的可以用于创建桌面和Web应用程序的缓存系统,它为一下处理提供了方便的机制
?在缓存中保存数据;
?从缓存中取得数据;
?从缓存中删除数据等。
? 使用JCS,可以把被缓存数据保存到指定的不同的数据存储区域。JCS定义了四种核心存储区域的类型:memory、disk、lateral和remote。我们可以一起使用这些核心存储区域来获得更大的缓存数据的灵活性。如可以指定首先被使用的存储区域,在缓存失败的时候使用另外一个存储区域。
?
Memory区
??? Memory区域是一个使用LRU(Least Recently Used)运算规则的纯内存缓存区域,在内存缓存区被填满的时候,LRU首先删除最近最少被使用的缓存数据。这个数据区有比较好执行效率,因此大多数的用户把它指定为默认首先被使用的缓存区。
?
Disk?区
?? 磁盘区是Web服务器的文件磁盘上的一个缓存数据的区域。要改善性能,可以在内存中保存缓存数据的键值(keys)而在文件磁盘上缓存实际的数据。在典型的首先使用内存区的JCS的配置中,任何不能在内存中持有的数据,就要被写到磁盘区中。
?
Lateral?区
???? Lateral缓存区提供一种把缓存数据分配个横向关联的多个服务器的方法,缓存服务器必须打开一个用于监听的端口,并且建立一个socket链接。因为这个存储区不能保证缓存间数据的一致性,所以这成为我们要面对的潜在问题。但是如果要设计使用这个存储区,那么这个问题是不太可能发生的。
?
Remote?区
??? Remote区使用RMI(Remote Method Invocation)提供一个缓存区。这个存储区使用处理缓存数据的远程服务器。远程缓存服务器能够被多个JCS客户端应用程序用于保存缓存数据。被定义的监听器用于搜集来自客户端和服务器的的请求。这个缓存区有助于缓解对系列化和多链接点的开销。
?
JCS配置
?? 配置JCS的过程就像创建和编写cache.ccf文件一样简单。Cache.ccf文件定义了要使用的缓存区以及这些缓存区的属性或选项,把这个文件结合到应用程序上需要一个方便快捷的刻度缓存的方法。下面是为了显示主要的配置点制作的一个尽可能简单的例子。你可以指定很多选项和配置来适应你所需要的正确的配置。
最基本的cache.cff文件-----一个纯内存缓存配置
jcs.default=jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=
org.apache.jcs.engine.memory.lru.LRUMemoryCache
?
?? 在上面的配置中,最后一行指定了LRUMemoryCache作为内存缓存,并且在内存中保持的对象数被设定为1000。
?
?? 大多数的应用程序的缓存系统需要比上面配置更广泛的配置,在下面的配置中,使用了内存区,并且在定义自己的存储区时,使用磁盘区。
?
jcs.default=DISK_REGION
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=
??org.apache.jcs.engine.memory.lru.LRUMemoryCache
?
jcs.region.OUR_REGION=DISK_REGION
jcs.region.OUR_REGION.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.OUR_REGION.cacheattributes.MaxObjects=1000
jcs.region.OUR_REGION.cacheattributes.MemoryCacheName=
??org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.OUR_REGION.cacheattributes.UseMemoryShrinker=true
jcs.region.OUR_REGION.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.OUR_REGION.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.OUR_REGION.cacheattributes.MaxSpoolPerRun=500
jcs.region.OUR_REGION.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.region.OUR_REGION.elementattributes.IsEternal=false
?
jcs.auxiliary.DISK_REGION=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DISK_REGION.attributes=
??org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DISK_REGION.attributes.DiskPath=c:/jcs/disk_region
jcs.auxiliary.DISK_REGION.attributes.maxKeySize=100000
?
? 在上面的配置中的第一行把DISK_REGION设定为默认的存储区。DISK_REGION是IndexedDiskCacheFactory类型,并且指定缓存文件要存放在磁盘上的c:/jcs/disk_region目录中。上面配置中的第二组定义了自己存储区,并且为它添加了一些选项,这种同时指定内存区和磁盘区的配置是常用的一种类型。上面配置中第三组中定义一个备用区。
?
????JCS有连个依赖:concurrent和commons-logging(在JCS1.2.7.0以前的版面中,有另外连个依赖:commos-collections和commons-lang)