【ACCESS精品源码栏目提醒】:网学会员ACCESS精品源码为您提供JCS缓存简介 - 技术总结参考,解决您在JCS缓存简介 - 技术总结学习中工作中的难题,参考学习。
JCS缓存简介.txt一个人 一盒烟 一台电脑过一天一个人 一瓶酒 一盘蚕豆过一宿。
永远扛不住女人的小脾气女人 永远抵不住男人的花言巧语。
1 使用方法 1.1 缓冲区region的概念 缓冲区可以理解为内存中临时存放缓冲对象的一个区域使用缓冲区可以改善某些应用的性能。
每个应用根据自身需要可以定义多个缓冲区各个缓冲区具有不同的属性比如缓冲区大小、缓冲过期时间、缓冲区构架等等。
不同类型的对象放在不同的缓冲区中以满足不同的需要。
缓冲区在JCS中以一个String对象来标示以方便配置和编程。
虽然可以使用中文来作为缓冲区的名称不过还是推荐使用英文字符而且不要有空格或者特殊字符。
1.2 缓冲编程 缓冲区的概念清晰后缓冲编程非常简单。
首先通过缓冲区的名称拿到缓冲对象。
比如有一个用户对象的缓冲区被预先定义为AccountObjectCache那么通过一个语句就可以拿到缓冲区对象 JCS accountObjectCache JCS.getInstance“AccountObjectCache” 这时可以将读取消耗资源非常大的对象根据关键字临时存放在缓冲区中 accountObjectCache.putkey value 需要时又可以通过accountObjectCache.getkey拿回缓冲对象。
类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缓冲区的使用情况以及清除缓冲区或者清除缓冲区中的某个缓冲对象。
JCSAdminServlet org.apache.jcs.admin.servlet.JCSAdminServletpropertiesWEB-INF/conf/JCSAdminServlet.velocity.properties 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.htmlcowiki04ebcdc71e10026c3440002ebff8c1ad JCS在Hiberate中的使用说明