[原创]JCS 介绍_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3451 | 回复: 1   主题: [原创]JCS 介绍        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2014-11-10 15:47:49 | [全部帖] [楼主帖] 楼主

    JCS 是Jakarta 的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将对象缓冲到内存、硬盘。具有缓冲对象时间过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用。对于一种需要频繁访问而每访问一次都非常消耗资源的对象,可以临时存放在缓冲区中,这样可以提高服务的性能。而JCS正是一个很好的缓冲工具。缓冲工具对于读操作远远多于写操作的应用性能提高非常显著。

JCS 除了可以将对象缓冲在内存中以外,还具有几个特性。如时间过期、索引式硬盘缓冲、并行式的分布缓冲等。

内存缓冲 

    JCS现在支持两种内存缓冲算法LRU和MRU。通常都是使用LRU(Least Recently Used),最近最少算法。当内存缓存区域满时,LRU会首先删除最近最少使用的缓存数据。使用内存缓冲区需要定义缓冲区大小,当超过缓冲区限制时,会将缓冲内容抛弃掉。如果有配硬盘缓冲,则将挤出来的缓冲内容写入硬盘缓冲区。

时间过期 

    JCS对于缓冲的对象,可以设定缓冲过期时间,一个对象在缓冲区中停留的时间超过这个时间,就会被认为是“不新鲜”而被放弃。 

索引式硬盘缓冲 

    一方面,为了避免缓冲区过大,撑爆虚拟机的内存,另一方面又希望能够缓冲更多的对象,JCS可以将超出缓冲区大小的对象缓存到硬盘上。配置上也比较方便,只需要指定缓冲临时文件的存放目录位置 。硬盘缓冲将缓冲对象的内容写到文件上,但是将访问索引保存在内存中,因此也能够达到尽可能高的访问效率。 

并行式的分布缓冲(Lateral) 

    通常,将对象缓冲在内存中,一方面提高了应用的性能,而另一方面却使得应用不可以分布式发布。因为假设一个应用配置在两台服务器上并行运行,而两台服务器单独缓冲,则很容易导致两个缓冲区内容出现版本上的不一致而出错。一个机器上修改了数据,这个动作会影响到本地内存缓冲区和数据库服务器,但是却不会通知到另一台服务器,导致另一台上缓冲的数据实际上已经无效了。 

并行式的分布缓冲就是解决这个问题。可以通过配置,将几台服务器配成一个缓冲组,组内每台服务器上有数据更新,会横向将更新的内容通过TCP/IP协议传输到其他服务器的缓冲层,这样就可以保证不会出现上述情况。这个的缺点是如果组内的并行的服务器数量增大后,组内的数据传输量将会迅速上升。这种方案适合并行服务器的数量比较少的情况。 

更多详细信息,请搜索<JCS(Java Caching System)简介以及相关文档>


JCS 配置

配置JCS 就是简单地创建和填充一个cache.ccf 文件,这个文件定义缓存应该使用哪些区域,以及这些区域的属性或选项。根据应用程序的需求,配置这个文件可以快速扩展缓存。在JCS的配置文件中(WEB-INF/classes/cache.ccf),有一个默认配置(default),也可以对每个缓冲区(region)单独配置,没有单独配置特性的缓冲区将使用默认的配置。

配置文件cache.ccf 

jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache


 上面配置了默认缓冲属性。一个应用中,由于对象类型的不同,可能会使用多个缓冲区,每个缓冲区都会有一个名字,如果在配置文件中没有指明特定的缓冲区的属性,所有的缓冲区都会根据默认属性来构建。上面的内容,指明缓冲区的大小为存放1000个对象,内存缓冲器使用LRUMemoryCache对象。可选的 还有MRUMemoryCache,应该可以自定义新的内存缓冲区。1000个缓冲对象这个容量,是指每个缓冲区都缓冲1000个,而不是指所有缓冲区总容量

时间过期 如果需要引入时间过期机制,则需要加上 

jcs.default.cacheattributes.cacheattributes.UseMemoryShrinker=true
jcs.default.cacheattributes.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.default.cacheattributes.cacheattributes.ShrinkerIntervalSeconds=60


这里指明对象超过3600秒则过期,每隔60秒检查一次。

索引式硬盘缓冲 索引式硬盘缓冲是辅助缓冲的一种,使用时需要做以下事情 #定义一个硬盘缓冲区产生器(Factory),取名为DC 

jcs.auxiliary.DC=org.apache.stratum.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DC.attributes=org.apache.stratum.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC.attributes.DiskPath=g:/dev/jakarta-turbine-stratum/raf #这里其实就是指明了缓冲文件存放到那里去。 


然后,做以下修改 jcs.default=DC 这样,所有未特别指定属性的缓冲区都会自己使用一个硬盘缓冲区,缓冲文件会以缓冲区的名字来命名。存放在指定的目录下。

配置文件 cache.ccf

#默认缓冲
#Fri Jan 23 22:22:01 CST 2009
#这里是设定使用什么 Auxiliaries 可以不填,使用默认值 
#设定使用的 cache 属性管理类别
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
#设定cache 内对象的上限
jcs.default.cacheattributes.MaxObjects=1000
#设定memory cahce 的算法
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
# 设定 element 可闲置的时间,IsEternal=false时有效 
jcs.default.elementattributes.IdleTime=1800
#设置element 是否永久(即不会过期)
jcs.default.elementattributes.IsEternal=false
jcs.default.elementattributes.IsLateral=true
jcs.default.elementattributes.IsRemote=true
jcs.default.elementattributes.IsSpool=true
#设定element建立后能存活多久,IsEternal=false时有效
jcs.default.elementattributes.MaxLifeSeconds=3600
#索引式磁盘缓冲
jcs.auxiliary.DC.attributes.DiskPath=D:/apps/cache/jbbs
jcs.auxiliary.DC.attributes.MaxKeySize=10000
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.default=DC
#单独指明某个缓冲区的属性,如针对缓冲区RMCache单独配置属性
jcs.region.RMCache.cacheattributes.MaxMemoryIdleTimeSeconds=600
jcs.region.RMCache.cacheattributes.MaxObjects=1200
jcs.region.RMCache.cacheattributes.MaxSpoolPerRun=100
jcs.region.RMCache.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.RMCache.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.RMCache.cacheattributes.UseMemoryShrinker=true
jcs.region.RMCache.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.RMCache.elementattributes.IdleTime=1800
jcs.region.RMCache.elementattributes.IsEternal=false
jcs.region.RMCache.elementattributes.IsLateral=true
jcs.region.RMCache.elementattributes.IsRemote=true
jcs.region.RMCache.elementattributes.IsSpool=true
jcs.region.RMCache.elementattributes.MaxLifeSeconds=7200
jcs.region.RMCache=DC


该贴被panpan.nie编辑于2014-11-10 15:48:50




赞(0)    操作        顶端 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2015-12-25 17:18:01 | [全部帖] [楼主帖] 2  楼



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论