(此文转载自CSDN)
1 使用方法
1.1 缓冲区(region)的概念
缓冲区可以理解为内存中临时存放缓冲对象的一个区域,使用缓冲区可以改善某些应用的性能。每个应用根据自身需要,可以定义多个缓冲区,各个缓冲区具有不同的属性,比如缓冲区大小、缓冲过期时间、缓冲区构架等等。不同类型的对象放在不同的缓冲区中以满足不同的需要。
缓冲区在JCS中以一个String对象来标示,以方便配置和编程。虽然可以使用中文来作为缓冲区的名称,不过还是推荐使用英文字符,而且不要有空格或者特殊字符。
1.2 缓冲编程
缓冲区的概念清晰后,缓冲编程非常简单。
首先通过缓冲区的名称拿到缓冲对象。比如,有一个用户对象的缓冲区被预先定义为AccountObjectCache,那么通过一个语句就可以拿到缓冲区对象:
JCS accountObjectCache = JCS.getInstance(“AccountObjectCache”);
这时,可以将读取消耗资源非常大的对象根据关键字临时存放在缓冲区中,
accountObjectCache.put(key, value);
需要时,又可以通过accountObjectCache.get(key);拿回缓冲对象。
类JCS是缓冲编程时唯一涉及到的类,使用方法可以查看javadoc。
Put和get方法与Map的接口非常相似,区别在于Map可以保证你put进去的东西可以拿回来,而缓冲区不会保证这一点。缓冲区会根据配置以一定方式运作,比如时间过期,或者缓冲区占满时,会自动将缓冲对象清除。外部程序再用key来获取对象时,就会返回null。
编程时,不会涉及到缓冲区的构架,这使得一个应用写好之后只需要修改配置,而不需要修改源代码就可以改变应用的缓冲构架。
1.3 缓冲区(region)的配置
JCS是一个比较完善的组合式的缓冲工具,可以根据配置来改变其缓冲区的结构。
在JCS的配置文件中(WEB-INF/classes/cache.ccf),有一个默认配置(default),也可以对每个缓冲区(region)单独配置,没有单独配置特性的缓冲区将使用默认的配置。
根据修改配置,可以构建JCS提供的各种特性。最基本的,可以配置内存缓冲区大小,缓冲过期时间。还可以配置加挂的辅助缓冲,包括缓冲到硬盘,缓冲到并行服务器,或者缓冲到其他存储介质。具体的配置方法,可以参照JCS的官方文档或者《JCS简介》。
不过,现在的服务器内存很大,而且硬盘相对还是太慢,所以个人感觉还没有必要使用硬盘缓冲。单机运行的情况下内存缓冲就足以解决问题。多台机器的情况下,也没有使用硬盘缓冲。
JCS目前在Turbine、Torque、Hibernate等几个工具中作为底层的缓冲器。但是JCS的分布式缓冲还不是很稳定,所以Hibernate并没有使用它的分布功能。
1.4 JCS后台控制
JCS提供了一个内置的后台控制Servlet
org.apache.jcs.admin.servlet.JCSAdminServlet
可以配置使用这个Servlet来查看JCS缓冲区的使用情况,以及清除缓冲区,或者清除缓冲区中的某个缓冲对象。
<servlet>
<servlet-name>JCSAdminServlet</servlet-name>
<servlet-class>org.apache.jcs.admin.servlet.JCSAdminServlet</servlet-class>
<init-param>
<param-name>properties</param-name>
<param-value>WEB-INF/conf/JCSAdminServlet.velocity.properties</param-value>
</init-param>
</servlet>
2 内部构造
JCS整体框架主要分为三个大的部分。访问接口(access)、缓冲引擎(engine)以及辅助缓冲(auxiliary)。下面对这三个层面单独描述。
2.1 访问接口
java.lang.Object
|
+--org.apache.jcs.access.CacheAccess
|
+--org.apache.jcs.access.GroupCacheAccess
|
+--org.apache.jcs.JCS
JCS是CacheAccess和GroupCacheAccess的子类,实现接口有
org.apache.jcs.access.behavior.IcacheAccess
org.apache.jcs.access.behavior.IGroupCacheAccess
这些接口定义了JCS的行为,主要是以关键字为检索条件的缓冲,还有以关键字为条件的分组缓冲。
2.2 缓冲引擎
JCS缓冲体系的缓冲引擎的结构很完善,并且具有良好的可扩展性。主体结构是一个组合式缓冲器(CompositeCache),其中有一个内存缓冲器(MemoryCache)和若干个辅助缓冲器(AuxiliaryCache)。
构建缓冲器时,首先向组合式缓冲管理器(CompositeCacheManager)申请,组合式缓冲管理器会构建一个缓冲配置器(CompositeCacheConfigurator)来从配置文件读取缓冲的配置,然后根据配置来构建组合式缓冲器(CompositeCache)。
配置好的组合式缓冲器会单独工作,管理读写自己缓冲区。
写入组合式缓冲器的对象首先会写入内存缓冲器,内存缓冲器的管理算法受具体实现的影响,已经提供的有LRU算法和MRU算法。也可以自定义新的算法。然后组合式缓冲器会检查自己的所有的辅助缓冲器,通知每个辅助缓冲器更新缓冲区。辅助缓冲器的写入动作都是异步的,因此不会因为辅助缓冲器的响应较慢而阻塞写入线程。
当从组合式缓冲器读取对象时,会首先检查内存缓冲器,如果命中对象,则直接返回。如果配置中声明了过期时间,还会检查对象是否过期。当然,还有一个后台线程隔一段时间自动将过期数据从内存缓冲区内清扫出去,以使得内存缓冲区达到尽可能高的利用率。如果内存缓冲器中没有指定关键字的对象,则会依次去各个辅助缓冲器中查找。如果都没有找到,则返回null。这是缓冲区的特性,缓冲区不是Map,放入的对象过一段时间可能就被挤出缓冲区了。
当通知组合式缓冲器去除某个关键字的对象时,也是先通知内存缓冲器去除,然后依次通知各个辅助缓冲器移除该关键字的对象。
2.3 辅助缓冲
目前提供的辅助缓冲器有以下三种,硬盘缓冲,并行式的分布缓冲,星状的客户/服务式的缓冲。如果有新的构思,还可以自定义新的辅助缓冲器。
2.3.1 索引式硬盘缓冲(Indexed Disk Cache)
其实,硬盘缓冲还有另外两种,可能都不如索引式硬盘缓冲,所以在JCS的文档中没有描述。他们是
org.apache.jcs.auxiliary.disk.jisp.JISPCache
org.apache.jcs.auxiliary.disk.hsql.HSQLCache
这两个只是提一下,我也没有研究过。
文档中称索引式硬盘缓冲可能是性能最好的硬盘缓冲方式,缓冲对象放置在缓冲文件中,但是所有的缓冲入口都放在内存中,也就是说,在索引式硬盘缓冲器中定位缓冲对象就像从Map对象中查找一样快,而从硬盘上读取缓冲对象需要2个物理读取。由于辅助缓冲的写入动作是异步的,所以不会写入也是非常快的。
索引式硬盘缓冲器在正常关闭的情况下会把内存中的对象索引写入到硬盘,下次启动时会从索引文件中恢复缓冲数据的索引。
2.3.2 横向式的并行缓冲(Lateral Cache)
横向式的并行缓冲方式下,每个物理机器上的横向缓冲器会榜定一个socket端口,监听其他机器来的信息。同时向其他配置中描述的所有物理机器的监听端口创建连接。如果连接失败,就会进入修复模式,每隔一段时间再次尝试连接。直到所有的连接都恢复正常为止。
当发生写入动作时,会将写入的缓冲对象包装成缓冲元素(ICacheElement),然后通过TCP连接发送到其他机器。
当发生去除动作时,会将关键字发送到其他机器,通知他们删除。
当发生读取动作时,如果PutOnlyMode设为true,那么将简单返回null。如果PutOnlyMode设为false,那么将会从远程的并行缓冲区读取。
2.3.3 Client/Server式的缓冲(Remote Cache)
RemoteCache的内部构造我也没有研究过,如果需要英文版文档,javadoc,以及源代码,可以在http://jakarta.apache.org/turbine/jcs找到。
3 相关资料
http://jakarta.apache.org/turbine/jcs/index.html
上述链接可以下载了JCS的官方文挡以及源代码(HTML)
http://hibernate.bluemars.net/61.html?cowiki=04ebcdc71e10026c3440002ebff8c1ad
JCS在Hiberate中的使用说明
分享到:
相关推荐
**JCS实践详解** JCS,全称Java Caching System,是一个基于Java开发的分布式缓存系统,旨在提升应用程序的性能,特别是在高读取、低写入场景下。JCS不仅提供基本的内存缓存功能,还具备丰富的高级特性,如内存管理...
要深入学习JCS,你可以通过阅读文档和实验这些示例来了解其工作原理和最佳实践。 总的来说,Java Caching System(JCS)是一个强大的工具,可以帮助开发人员优化基于数据库的应用程序,提供快速的数据访问,并且...
**JCS(Java Cache System)1.3 资源包详解** JCS(Java Cache System)是一款开源的、高性能的缓存系统,主要用于提高应用程序的性能和响应速度。它通过将常用数据存储在内存中,避免了频繁的数据库访问,从而提升...
**JCS(Java Caching System)1.3.jar** JCS(Java Caching System)是一个开源的、基于内存的分布式缓存系统,主要用于提高应用程序的性能和可伸缩性。JCS是Apache软件基金会下的一个项目,其核心设计目标是为Java...
Java Cache System(JCS)是一个开源的、基于内存的分布式缓存系统,主要用来提高应用程序的性能和...通过深入学习和实践,你可以掌握更多关于JCS的高级特性,如缓存同步、事件监听、缓存压缩等,以提升你的应用性能。
### JCS 简介及关键技术点 #### 一、JCS 概述 JCS(Jakarta Caching System)是Apache Jakarta项目下的一个子项目,最初为Turbine项目的一部分,旨在为Java应用程序提供一个高效且灵活的分布式缓存解决方案。通过...
JCS(Java Caching System)是Apache软件基金会开发的一个开源的、分布式的对象缓存系统,主要用于提高应用程序的性能和可伸缩性。它通过存储经常访问的数据到内存中,减少了对数据库或其他资源的访问,从而加快了...
Java Caching System (JCS) 是一个开源的缓存解决方案,它主要用于提高应用程序的性能,尤其是在处理大量数据库查询时。JCS通过将常用数据存储在内存中,避免了频繁访问数据库,从而减轻了数据库的负载。在【描述】...
标题中的"jcs 所需jar包 共3个"指的是Java Caching System(JCS)所需的三个核心组件。JCS是一个开源的内存缓存系统,用于提高应用程序的性能和响应速度,它通过将数据存储在内存中,避免了频繁的数据库访问。这三份...
**JCS(Java Caching System)详解** JCS(Java Caching System)是Apache软件基金会的一个开源项目,它提供了一种高效、灵活的缓存解决方案,特别适用于Web开发中的数据缓存需求。JCS的核心目标是提高应用程序的...
Java Concurrency Service (JCS) 是一个开源的Java缓存系统,由Apache软件基金会开发,旨在提高应用程序的性能和效率。`concurrent.jar` 文件是JCS的核心组件,包含了实现并发和缓存管理的类库。它依赖于Java的并发...
**JCS(Java Caching System)1.3 开源缓存架构详解** JCS(Java Caching System)是一个开源的、高性能的缓存框架,它主要用于提高应用的性能和响应速度,通过将常用数据存储在内存中,避免了频繁地访问数据库或...
JCS缓存入门及简介
本文将主要探讨本地缓存的几个常见实现,包括Ehcache、JCS(Java Caching System)和Cache4j,并进行性能测试,同时分析它们各自适用的使用场景。 首先,Ehcache是一个广泛使用的开源Java缓存解决方案,它提供了...
《JCS-018立式加工中心主轴箱及CAD设计详解》 在机械工程领域,加工中心是集高效、精密和自动化于一体的先进设备,...对于毕业生来说,这份设计书不仅提供了实践案例,也是理论知识与实际应用相结合的宝贵学习资料。
《JCS-018立式加工中心主轴箱及设计资料详解》 立式加工中心(Vertical Machining ...对于进行毕业设计或专业设计的学生和工程师来说,这是一份极其宝贵的参考资料,可以促进理论知识与实践操作的结合,提升设计能力。
昆仑海岸 JCS大量程系列超声波物位变送器使用说明书PDF,昆仑海岸 JCS大量程系列超声波物位变送器使用说明书
JCS
【标题】"触屏键盘国产jcs手机地图全"揭示了这一内容主要涉及的是针对中国国产手机,特别是那些具备触屏和键盘功能的设备,提供全面的JCS手机地图服务。这里的“JCS”可能指的是某款特定的地图应用或者导航系统,它...