`

Apache JCS(Java Caching System)简介

阅读更多

JCS - Java缓存系统
  JCS是一个用java编写的分布式缓存系统。它被设计用来加速应用程序,通过提供一个手段来管理多种变化种类的缓存数据。像其它缓存系统一样,JCS对高读(high read)、低放(low put)的应用程序非常有用。在一个有效的缓存系统里,响应时间急剧降低和瓶颈远离数据库!学习如何使用JCS吧。

JCS超越了简单地在内存中缓存对象的功能。它提供了许多附加的功能:

● 内存管理
● 磁盘溢位(和碎片整理)
● 线程池控制
● 元素分组
● 最少的依赖
● 快速嵌套的直接了当的删除
● 数据超期(空闲时间和最大文件)
● 可扩展的框架
● 完全可配置的运行时参数
● 局部数据分割和配置
● 纤细粒度的元素配置选项
● 远程同步
● 远程存储恢复
● 非阻塞 "zombie" (balking facade(等待外观)) 模式
● 横向的元素分发经由HTTP、TCP或者 UDP
● 其它缓存的UDP发现
● 元素事件处理
● 远程服务器链锁(或者说集群)和容错

JCS工作在JDK1.3或以上版本。它仅仅需要两个库支持:Commons Logging和Doug Lea的Util Concurrent。

官方网站 http://jakarta.apache.org/jcs/index.html

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

JCS的特性
JCS除了简单的将对象缓冲在内存中以外,还具有几个特性,以适应企业级缓冲系统的需要。这些特性包括时间过期、索引式硬盘缓冲、并行式的分布缓冲等。
内存缓冲
JCS现在支持两种内存缓冲算法LRU和MRU。通常都是使用LRU算法。
org.apache.stratum.jcs.engine.memory.lru.LRUMemoryCache
使用内存缓冲区需要定义缓冲区大小,当超过缓冲区限制时,会将缓冲内容抛弃掉。如果有配硬盘缓冲,则将挤出来的缓冲内容写入硬盘缓冲区。

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

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

并行式的分布缓冲(Lateral)
通常,将对象缓冲在内存中,一方面提高了应用的性能,而另一方面却使得应用不可以分布式发布。因为假设一个应用配置在两台服务器上并行运行,而两台服务器 单独缓冲,则很容易导致两个缓冲区内容出现版本上的不一致而出错。一个机器上修改了数据,这个动作会影响到本地内存缓冲区和数据库服务器,但是却不会通知 到另一台服务器,导致另一台上缓冲的数据实际上已经无效了。
并行式的分布缓冲就是解决这个问题。可以通过配置,将几台服务器配成一个缓冲组,组内每台服务器上有数据更新,会横向将更新的内容通过TCP/IP协议传 输到其他服务器的缓冲层,这样就可以保证不会出现上述情况。这个的缺点是如果组内的并行的服务器数量增大后,组内的数据传输量将会迅速上升。这种方案适合 并行服务器的数量比较少的情况。

Client/Server式的缓冲(Remote)
客户/服务端式的缓冲集群。这种方式支持一个主服务器和最高达到256个客户端。客户端的缓冲层会尝试连接主服务器,如果连接成功,就会在主服务器上注册。每个客户端有数据更新,就会通知到主服务器,主服务器会将更新通知到除消息来源的客户端以外的所有的客户端。
每个客户端可以配置超过一个服务器,第一个服务器是主服务器,如果与第一个服务器连接失败,客户端会尝试与备用的服务器连接,如果连接成功,就会通过备用 服务器与其他客户端对话,同时会定期继续尝试与主服务器取得连接。如果备用服务器也连接失败,就会按照配置顺序尝试与下一个备用服务器连接。
这种方式下,更新通知是一种轻量级的,一个机器上的数据更新,不会把整个数据传输出去,而只是通知一个ID,当远程的其他机器收到更新通知后,就会把对应ID的缓冲对象从本地的内存缓冲区中移除,以保证不会在缓冲区内出现错误数据。
这种构造需要分别配置客户端和服务器,配置比较麻烦。

配置方法
JCS的好处之一,就是应用在开发的时候,可以不用去构思底层的缓冲配置构架。同一个应用,只需要修改配置,就可以改变缓冲构架,不需要修改应用的源代 码。配置方法也比较简单,就是修改配置文件cache.ccf。这个文件放置在WEB-INF/classes目录下。配置格式类似log4j的配置文件 格式。下面介绍一下使用各种缓冲结构的配置方法。

内存缓冲
#WEB-INF/classes/cache.ccf(以下内容不要换行)
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
上面配置了默认缓冲属性。一个应用中,由于对象类型的不同,可能会使用多个缓冲区,每个缓冲区都会有一个名字,如果在配置文件中没有指明特定的缓冲区的属 性,所有的缓冲区都会根据默认属性来构建。上面的内容,指明缓冲区的大小为存放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
这样,所有未特别指定属性的缓冲区都会自己使用一个硬盘缓冲区,缓冲文件会以缓冲区的名字来命名。存放在指定的目录下。


横向式的并行缓冲
并行式的配置如下
jcs.auxiliary.LTCP=org.apache.jcs.auxiliary.lateral.LateralCacheFactory
jcs.auxiliary.LTCP.attributes=org.apache.jcs.auxiliary.lateral.LateralCacheAttributes
jcs.auxiliary.LTCP.attributes.TransmissionTypeName=TCP
jcs.auxiliary.LTCP.attributes.TcpServers=192.168.10.129:1121,192.168.10.222:1121
jcs.auxiliary.LTCP.attributes.TcpListenerPort=1121
jcs.auxiliary.LTCP.attributes.PutOnlyMode=false
这里的配置是在41,129,221三台机器上实现并行缓冲的。
大家都在1121端口上监听,同时与另外两台机器连接。如果连接失败,就会等待一个时间后再连接一次,直到连接成功为止。三台机器中任意一台的缓冲区发生更新,比如put和remove动作,就会把更新传递给另外两台。


单独指明某个缓冲区的属性
如果,针对某个缓冲区,比如叫做TestCache1,需要单独配置属性,可以如下配置。
jcs.region.testCache1=DC,LTCP
jcs.region.testCache1.cacheattributes=org.apache.stratum.jcs.engine.CompositeCacheAttributes
jcs.region.testCache1.cacheattributes.MaxObjects=1000
jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.stratum.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.testCache1.cacheattributes.UseMemoryShrinker=true
jcs.region.testCache1.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.testCache1.cacheattributes.ShrinkerIntervalSeconds=60

system.GroupIdCache
这个概念我也不是很清楚。不过JCS文档中指出配置以下内容会比较好。
jcs.system.groupIdCache=DC
jcs.system.groupIdCache.cacheattributes=org.apache.stratum.jcs.engine.CompositeCacheAttributes
jcs.system.groupIdCache.cacheattributes.MaxObjects=10000

jcs.system.groupIdCache.cacheattributes.MemoryCacheName=org.apache.stratum.jcs.engine.memory.lru.LRUMemoryCache
这可能是JCS自己的组管理体系上的缓冲区。


Client/Server式的缓冲(Remote)
这种构架需要单独配置客户端和服务端,如果要研究,可以查看
http://jakarta.apache.org/turbine/jcs/RemoteAuxCache.html

 

分享到:
评论

相关推荐

    java caching system完整项目例子(包括用到的JAR包)

    Java 缓存系统(Java Caching System,简称JCS)是一种高效的、可扩展的缓存解决方案,主要用于提高应用程序性能,减少对数据库的访问频率。它通过存储数据在内存中,使得重复请求的数据能够快速获取,从而降低了...

    Apache java项目全介绍

    - **简介**: JCS (Java Caching System)是一个缓存管理系统,提供了一套缓存API。 - **特点**: JCS支持多种缓存策略和过期机制,有助于提高系统的响应速度和性能。 ##### 21. JMeter - **简介**: JMeter是一款用于...

    Jcs1.3.Jar

    **JCS(Java Caching System)1.3.jar** JCS(Java Caching System)是一个开源的、基于内存的分布式缓存系统,主要用于提高应用程序的性能和可伸缩性。JCS是Apache软件基金会下的一个项目,其核心设计目标是为Java...

    JCS简介

    JCS(Jakarta Caching System)是Apache Jakarta项目下的一个子项目,最初为Turbine项目的一部分,旨在为Java应用程序提供一个高效且灵活的分布式缓存解决方案。通过缓存常用数据,JCS有助于降低对数据库等后端系统...

    jcs缓存处理

    JCS(Java Caching System)是Apache软件基金会的一个开源项目,它提供了一种高效、灵活的缓存解决方案,特别适用于Web开发中的数据缓存需求。JCS的核心目标是提高应用程序的性能,通过在内存中存储经常访问的数据,...

    shiftone-cache swarmcache ehcache jcs 源码

    本文将深入探讨四种知名的缓存解决方案:ShiftOne Cache、SwarmCache、EHCache以及JCS(Java Caching System),并分析它们的源码,以理解其工作原理和优化策略。 首先,让我们来看看ShiftOne Cache。这是一个轻量...

    jcs缓存所需要的包

    JCS(Java Caching System)是Apache软件基金会开发的一个开源的、分布式的对象缓存系统,主要用于提高应用程序的性能和可伸缩性。它通过存储经常访问的数据到内存中,减少了对数据库或其他资源的访问,从而加快了...

    jcs 所需jar包 共3个

    标题中的"jcs 所需jar包 共3个"指的是Java Caching System(JCS)所需的三个核心组件。JCS是一个开源的内存缓存系统,用于提高应用程序的性能和响应速度,它通过将数据存储在内存中,避免了频繁的数据库访问。这三份...

    apache commons笔记1

    14. **JCS (Java Caching System)**:是一个 Java 缓存系统,用于存储和检索临时数据,提高应用程序的响应速度。 15. **Jexl**:是一个表达式语言,扩展了 JSTL 表达式语言,常用于动态计算和脚本执行。 16. **...

    Java缓存讨论.pdf

    Java Caching System (JCS)是Apache Turbine的一个子项目,提供复合缓存功能,对象可以被缓存到内存和硬盘,并支持对象过期时间设置。JCS也支持构建分布式缓存架构,适合读操作远大于写操作的高并发场景。 ...

    turbine简介

    5. **JCS (Java Caching System)** - 服务器端的分布式缓存系统,支持多种缓存策略和技术。 6. **Stratum** - Turbine与Avalon框架之间的集成工具。 此外,Jakarta Velocity作为一个与Turbine紧密集成的Web模板引擎...

    Hibernate中所有包作用详细讲解

    JCS (Java Caching System) 是一个高性能的Java缓存系统,它提供了一种机制来缓存数据,减少对后端数据库的请求频率。Hibernate可以通过配置使用JCS作为二级缓存实现。 #### 18. JDBC2_0-stdext.jar 这是一个扩展...

Global site tag (gtag.js) - Google Analytics