使用JCS在Web门户应用中实现对象缓存
- 格式:doc
- 大小:160.00 KB
- 文档页数:13
cacheable key为对象
Cacheable key 可以是一个对象,在缓存中用于唯一标识缓存的对象。
为了使一个对象能够作为 cacheable key,它必须满足两个条件:
1.唯一性:cacheable key 必须能够唯一地标识一个对象,以便在缓存中进行查找和比较。
2.可序列化:cacheable key 必须能够序列化和反序列化,以便存储在缓存中和从缓存中读取。
例如,一个 cacheable key 可以是一个包含多个属性的 Java 对象,其中每个属性都是唯一的,而且对象本身实现了Serializable 接口,以便能够在缓存中进行序列化和反序列化。
在使用 cacheable key 时,需要注意的是,为了确保缓存的正确性和一致性,缓存的 key 应该是不可变的,即不可改变的对象。
这是因为如果一个对象在缓存中被修改了,而它又作为缓存的 key,那么在进行查找和比较时会出现问题,导致缓存的不一致性。
同时,在设计 cacheable key 时,还需要考虑到对象的hashCode() 和 equals() 方法的正确实现,以确保对象在缓存中能够正确地被比较和查找。
cache的用法Cache的用法Cache(缓存)是一种用于存储临时数据的技术,可以提高数据的访问速度和系统的性能。
在软件开发中,Cache有多种用法,下面将详细介绍其中一些常见的用法。
1. 网页缓存静态文件缓存静态文件如CSS、JavaScript和图片等,在第一次请求后可以被服务器缓存到浏览器本地,之后再次请求时直接从缓存读取,减少了网络传输时间和服务器负载。
页面片段缓存部分动态内容如导航菜单、热门文章列表等,在后端生成后可以缓存在服务器端,下次请求时直接从缓存中获取,减少数据库查询和页面渲染时间。
2. 数据库缓存查询结果缓存数据库查询是消耗资源的操作,可以将查询的结果缓存在内存中,下次查询同样的数据时直接从缓存读取,避免了再次访问数据库。
对象级缓存一些常用的业务对象如用户信息、商品信息等,可以将其缓存在内存中,避免频繁的数据库查询操作,提高系统响应速度和并发能力。
3. 键值对缓存键值对缓存是将数据以键值对的形式存储在内存中,常用于缓存一些常用的配置参数、临时计算结果等。
它可以快速地读写数据,并可以设置过期时间,一般使用LRU(最近最少使用)算法进行缓存数据的清理。
4. HTTP缓存HTTP缓存是通过设置HTTP头信息的方式进行缓存的。
可以通过设置Expires头字段或Cache-Control头字段来控制缓存的过期时间和缓存策略。
如果服务器返回的响应带有相同的URL和头字段,则客户端可以直接从缓存获取数据,减少了网络传输时间。
5. 代码缓存编译型语言的代码在每次运行前都需要经过编译的过程,可以将编译后生成的中间代码或机器码缓存起来,下次运行时直接加载缓存,减少编译时间,提高系统性能。
6. CDN缓存内容分发网络(CDN)是一种分布式系统,可以将文件缓存到离用户更近的服务器上,用户在访问网站时可以从相对较近的服务器获取文件,减少了网络延迟和传输时间,提高了访问速度。
以上是一些常见的Cache(缓存)的用法,通过合理使用Cache,可以显著提升系统的性能和用户体验。
JBossCache 讲解说明是什么?一个树形结构、支持集群、支持事务的缓存技术。
有什么作用?JBoss Cache是针对Java应用的企业级集群解决方案,其目的是通过缓存需要频繁访问的Java对象,提高应用的可用性并大幅度提升应用的整体性能。
JBoss Cache这样的分布式缓存扮演的是一个处于应用服务前端和数据库间的中间层的角色,提供对持久性数据状态在内存中的快速访问。
JBoss Cache能够确保缓存中的数据状态和数据库中的状态一致、及时更新数据状态、并且保证JVM不会出现堆溢出问题。
为什么不使用Map?很多人认为Map是考虑缓存的出发点(实际上,JSR-107 JCACHE专家组曾经在Map的基础上扩展实现javax.cache.Cache)。
尽管Map非常适合用来存储简单的键/值对,在缓存必需的其它特性上,它就难免有点黔驴技穷,比如内存管理(eviction)、钝化(passivation)和持续性、细粒度锁定模型(首先,HashMap根本不是线程安全的;而ConcurrentHashMap采用的锁是粗粒度级的,它甚至不允许非阻塞用户或多用户从map中读取数据)等。
而对于“合格的”缓存来说,它还需要具备一些“企业”特性,包括JTA兼容、附加侦听器等功能。
Map虽然是个好的起点,但如果需要实现或者管理我刚才提到的那些特性的话,选择缓存还是要比Map来得更合适一些。
JBossCache的缓存方式JBoss Cache提供两种缓存方式:核心缓存(TreeCache)和POJO缓存(TreeCacheAOP)核心缓存: 会直接把传递给它的数据存储在一个树型结构中。
键/值对被存储在树的节点上,出于复制或持续性的需要它们都被序列化了POJO 缓存: 则采用比较复杂的机制——利用字节码编织来内省(introspecting)用户类,并向用户类的域添加侦听器,一旦域值有任何变化,侦听器会立刻通知缓存。
《Web应用开发》选择题(含参考答案)参考教材:《Java Web应用开发渐进教程》,唐建平主编,清华大学出版社,2014年1月。
=== Java EE基础 ===1. 以下哪些是Java EE体系架构的优点?选择是__________。
(多选)A. 不依赖硬件和操作系统B. 程序运行速度快C. 提高Windows系统服务器效率D. 方便企业信息系统集成答案:AD2. 以下有关Java EE技术的描述中,哪种说法是正确的?选择结果是__________。
A. 是动态网页的设计工具B. 是一个标准中间件体系结构C. 是一种计算机编程语言D. 是企业编写Java语言的工具答案:B3. 以下哪些是JAVA EE框架的服务技术?选择是__________。
(多选)A. Web服务技术B. 安全技术C. 持久化技术D. 数据连接技术答案:ABCD4. 以下哪些是J2EE的客户端组件?选择是__________。
(多选)A. Java BeanB. 客户端应用程序C. APPLETD. Web浏览器答案:BCD5. 以下哪些是Java EE标准组件?它们是__________。
(多选)A. JSPB. JDKC. JFrameD. Servlet答案:AD6. 以下哪些是Java EE标准组件?它们是__________。
(多选)A. JSPB. ServletC. EJBD. Java答案:ABC8. 下列有关Java EE用途的说法,哪种是正确的?请选择一个正确的答案是__________。
A. 规范分布式多层企业应用系统的开发B. 设计动态网页C. 设计桌面应用程序D. 设计网络管理程序答案:A10. 下列有关Java EE技术的陈述中,哪种说法是正确的?选择结果是__________。
A. Java EE是一个标准中间件体系结构B. Java EE一门编程语言C. 一种编写Java语言的工具D. 设计动态网页的工具答案:A11. 在Java Web开发中,要在服务器端查询cookie, 要用到HttpServletRequest 的哪个方法?选择是_______。
java cache用法Java中的缓存是一种常用的数据结构,用于提高应用程序的性能和响应速度。
Java提供了多种缓存实现,如JavaCache、Ehcache、GuavaCache等,这些缓存可以存储数据并在需要时快速检索。
本篇文章将介绍JavaCache的使用方法。
JavaCache是一个简单的缓存实现,它提供了一个易于使用的API,可以方便地添加、获取和移除缓存数据。
JavaCache的设计目标是易于使用、高性能和可扩展性。
它支持通过多个存储引擎来扩展缓存,每个存储引擎都具有不同的性能特点。
1.添加缓存数据使用JavaCache添加缓存数据非常简单。
首先,需要创建一个Cache对象,并指定存储引擎的类型和名称。
然后,可以使用put方法将数据添加到缓存中。
例如:```javaCachecache=newCache("myCache",100);//创建一个缓存对象,存储引擎类型为Memory,容量为100个字节cache.put("key","value");//将数据添加到缓存中```2.获取缓存数据使用JavaCache获取缓存数据也非常简单。
可以使用get方法从缓存中获取数据。
如果数据不存在于缓存中,则返回null。
例如:```javaStringvalue=cache.get("key");//从缓存中获取数据```3.移除缓存数据使用JavaCache移除缓存数据也非常简单。
可以使用remove方法从缓存中移除指定的数据。
例如:```javacache.remove("key");//从缓存中移除数据```4.配置存储引擎和缓存容量JavaCache支持多个存储引擎,每个存储引擎具有不同的性能特点。
可以通过配置存储引擎的类型和名称来扩展缓存。
此外,还可以配置缓存的容量,以确保缓存不会因为存储空间不足而出现性能问题。
前端开发技术中的静态资源缓存实现方法在现代Web应用程序开发中,静态资源的缓存是提高网站性能和加载速度的重要因素。
静态资源包括CSS、JavaScript、图片和字体等文件,而静态资源缓存就是将这些文件保存在客户端以便后续访问时能够快速加载。
本文将介绍一些常用的前端开发技术中的静态资源缓存实现方法。
一、缓存控制响应头HTTP响应头中的Cache-Control字段是控制缓存行为的重要标记。
通过在响应头中设置合适的Cache-Control值,可以实现对静态资源的缓存控制。
常见的Cache-Control值有:1. Public:表示资源可以被所有用户缓存,包括代理服务器。
2. Private:表示资源只能被单个用户或浏览器缓存,不能被代理服务器缓存。
3. No-cache:表示资源需要重新验证,不能直接从缓存中获取,但仍然可以被缓存下来供下次使用。
4. No-store:表示资源不允许被缓存。
通过合理设置Cache-Control响应头,可以灵活控制静态资源的缓存策略,从而提高网站的性能和加载速度。
二、文件名哈希静态资源文件的文件名哈希是一种常用的缓存实现方法。
通过为每个静态资源文件生成唯一的哈希值,并将哈希值添加到文件名中,可以实现当文件内容发生变化时,自动更新文件名,从而强制浏览器重新从服务器请求最新的文件。
这种方法可以有效解决浏览器缓存问题,提高静态资源的加载性能。
三、版本号控制版本号控制是另一种常用的静态资源缓存实现方法。
通过将版本号加入到静态资源文件的URL中,可以实现当文件内容发生变化时,自动更新资源URL,从而强制浏览器重新请求最新的文件。
常见的版本号控制方式有以下几种:1. 在URL中添加查询参数:将版本号以查询参数的形式添加到URL中,例如:/static/css/style.css?v=1.0。
2. 在文件名中添加版本号:将版本号直接添加到文件名中,例如:/static/css/style-1.0.css。
分类 项目名 说明 开发语言服务器 (共20) Apache HTTPServer全球第一HTTP服务器 C/C++ Tomcat Java的Web服务器 Java James 邮件服务器 Java SpamAssassin 反垃圾邮件 C/C++ Perl Apache的Perl编程语言支持 C/C++ Tcl TCL脚本语言 C/C++ Directory Server 超级目录服务器 Java Axis WebServic服务器 Java KandulaAxis中WS-Coordination、WS-AtomicTransaction、WS-BusinessActivity协议的实现Java MuseAxis中WS-ResourceFramework(WSRF), WS-BaseNotification(WSN), andWS-DistributedManagement(WSDM) 标准的实现(该项目Logo是个不认识的古汉字)Java PubscribeWeb Services Notification (WSN) 标准实现Java Sandesha WS-ReliableMessaging 标准实现 Java WSS4J WS-Security 标准实现 Java WSRFWeb Services Resource Framework标准实现Java AddressingWebService的WS-Addressing标准(IBM、微软、BEA发布)实现Java XML Security XML签名与加密标准的Java、C++实现 Java/C++ jUDDI UDDI的Java实现 Java XML-RPC XML-RPC实现 Java Derby 纯Java做的关系数据库 Java Xindice XML数据库 Java开发工具(共5) Ant 自动编译 Java Maven项目管理工具,比Ant强大,支持插件开发Java Gump 每日集成工具,支持Ant、Maven PythonJMeter Web应用性能测试 Java DdlUtils 用XML来定义DDL JavaWeb开发框架(共19) Struts MVC的Web开发框架 Java CocoonWeb开发框架,基于可运行的XML管道语言Java FOP XSL-FO 打印与输出解决方案,基于Java Java AxKit 基于XML的Web发布 Java Tapestry Web开发框架 Java Turbine Web开发框架 Java Shale 基于JSF的Web开发框架 Java MyFaces 第一个开源的JSF实现 Java Beehive基于Structs的J2EE框架,简化J2EE编程;含Web界面、WebService开发框架Java Velocity 模板引擎 Java Portals 门户解决方案 Java Cactus Web开发测试框架 Java Forrest 基于Cocoon的Web发布解决方案 Java Slide 内容管理,支持WebDAV Java Jackrabbit 内容库,用于内容管理 Java Lenya内容管理,支持版本管理、工作流、所见所得编辑器Java Xang 基于JavaScript进行动态Web开发 Java Xindice 纯XML数据库 Java JCS分布式Cache系统(Java CachingSystem)Java容器(共7) Geronimo J2EE容器,类似JBoss Java iBATIS 简单OR映射,有.NET版本 Java/C# Torque OR映射 Java ORB ObjectRelationalBridge,OR映射 Java JDO JDO标准的一个实现 Java HiveMind 类似Spring的东西,微内核DI容器 Java Excalibur IoC容器 Java组件(共82) APR 不同操作系统间可移植运行时库 C/C++Regexp Java正则表达式 JavaORO Perl风格的正则表达式 JavaXerces XML解析,Java/C两种版本 Java/C++Crimson XML解析器 JavaAXIOM 更高效的DOM实现 JavaLucene 全文检索,有.NET版本 Java/C#Logging 不仅Log4j,各个语言的版本都有了 Java/C++/Perl/C# XMLBeans XML转对象 JavaJaxMe Java/XML绑定的实现 JavaTaglibs JSP Tag库 Java HttpComponents HTTP访问控件 JavaECS辅助生成标签(Element ConstructionSet)JavaWSIFWebService调用(Web ServicesInvocation Framework)JavaSOAP SOAP标准实现 JavaWoden WSDL书写工具 JavaTuscany 简化SOA开发 JavaMIRAE 让手机支持基于XML的服务 JavaBSF脚本语言框架(Bean ScriptingFramework),支持JavaScript等多种脚本语言JavaBCEL用于直接生成字节码(Byte CodeEngineering Library)JavaPOI 存取Office文档 JavaBatik JAVA的SVG实现 JavaAttributes 访问Java 1.5语言中定义的meta 这些项目都在jakartacommons中,都是Java的BeanUtils 反射支持Betwixt XML/JavaBean转换Chain 职责链模式实现CLI 命令行参数解析Codec 通用加密/加密算法Collections Java 容器类完善扩充 Configuration 各种来源配置文件存取 Daemon Java 模拟Unix 的Daemon DBCP 数据链连接池 DbUtils JDBC 辅助类Digester XML 到Java 对象映射工具 Discovery 根据名称来查找资源 EL JSP 2.0 表达式标准实现 Email 发送Email 类 FileUpload 文件上传辅助类 HttpClient HTTP 客户端 IO IO 操作辅助类 Jelly 基于XML 的脚本引擎 Jexl JSTL 表达式语言扩展JXPath 用XPath 语言来操作对象的辅助类 Lang ng.类扩充 Launcher 跨平台Java 应用启动器 Logging 不同Log 实现的封装 Math 数学、统计辅助类Modeler 创建兼容JMX 标准的MBeans Net 各种网络协议实现 Pool 对象池Primitives 很小的Java 原始对象类型操作辅助类 SCXML 状态图XML 标准实现Transaction 多层次容器、文件操作事务支持 Validator 用XML 定义校验器和校验规则 VFS 虚拟文件系统用于操作FTP 、SMB 、Zip 等Compress tar、zip、bzip2压缩格式文件操作 这些项目都在jakarta commons 中的Sandbox中CSV CSV 文件格式支持Exec 外部进程执行和环境设置辅助类 Finder 模拟Unix find 命令 I18n国际化辅助类Id 生成ID 辅助类 Javaflow 应用状态管理 JCI Java 编译器接口 OpenPGP OpenPGP封装Pipeline 管道辅助类用于并行或者顺序操作数据 Proxy 动态代码生成辅助类Cache 对象缓存服务 这些项目都在jakarta commons中的Dormant (睡眠)中Clazz class 操作和反射操作 Contract 契约编程用到Java 中 Convert Java 对象类西转换辅助类 Events 事件管理容器 Feedparser RSS 和Atom 实现 Functor 用对象方式来操作函数 JJar Jar 操作 Latka HTTP 功能测试Mapper 简单封装后可以选择不同的对象映射实现 Messenger JMS 用于Web 开发中的辅助类 Resources 国际化资源信息查找 Scaffold Web 应用开发工具 ThreadPool 线程池Workflow 工作流管理系统框架 XMLIOXML 配置快速简便导入。
WGS84与WGS84WebMercator1. WGS84与WGS84 Web Mercator1.1 关于WGS1984投影坐标系UTM (Universal Transverse Mercator)坐标系是由美国军⽅在1947提出的。
虽然我们仍然将其看作与“⾼斯-克吕格”相似的坐标系统,但实际上UTM采⽤了⽹格的分带(或分块)。
除在美国本⼟采⽤Clarke 1866椭球体以外,UTM在世界其他地⽅都采⽤WGS84。
UTM是由美国制定,因此起始分带并不在本初⼦午线,⽽是在180度,因⽽所有美国本⼟都处于0-30带内。
UTM投影采⽤6度分带,从东经180度(或西经180度)开始,⾃西向东算起,因此1带的中央经线为-177(-180 -(-6)),⽽0度经线为30带和31带的分界,这两带的分界分别是-3和3度。
纬度采⽤8度分带,从80S到84N共20个纬度带(X带多4度),分别⽤C到X的字母来表⽰。
为了避免和数字混淆,I和O没有采⽤。
UTM的“false easting”值为500km,⽽南半球UTM带的“false northing”为10000km在arcgis中打开WGS1984投影⽂件,仔细看看,我们可以发现⾥⾯中有三种不同的投影⽂件:如下:WGS1984 BLM Zone 14N(ftvs).prjWGS 1984 Complex UTM Zone 20N.prj (该处由20N——30N)WGS 1984 UTM Zone 9s.prj(该处由9s——60s)此处的S代表南半球,同样北半球有同样的变化1.UTM投影UTM投影全称为“通⽤横轴墨卡托投影”,英⽂名称为Universal Transverse Mercator,是⼀种等⾓横轴割圆柱投影,圆柱割地球于南纬80度、北纬84度两条等⾼圈,被许多国家⽤作地形图的数学基础,如中国采⽤的⾼斯-克吕格投影就是UTM投影的⼀种变形,很多遥感数据,如Landsat和Aster数据都应⽤UTM投影发布的。
使用JCS在Web门户应用中实现对象缓存(1) 使用JCS在Web门户应用中实现对象缓存 在我最近的web门户应用开发工作中,我们需要在Servlet容器(Tomcat)的内存中存储一些查找数据(例如:比率更新数据、状态和产品列表),这样我们不需要在每次访问数据的时候进行数据库查找。同时,我们也需要定期地刷新存储在内存中的数据以保证其新鲜和准确。我们也需要一种机制在不同的时间间隔对存储在内存中的不同类型的数据进行刷新。例如,比率更新数据需要每天刷新一次,而查找类型的数据则可以在内存中保留很长一段时间。对象缓存是最方便地达到上述所有目的的完美解决方案。 对象缓存 最恰当的对象缓存的定义可以在Object Caching Service for Java (OCS4J)的功能规范文档中找到 ,它是这样定义的: 服务器必须将信息和可执行对象分为三种基本类别管理: 永远不会改变的对象,每次请求都会发生改变的对象,以及在两者之间的对象。Java对前两种对象的处理提供了很好的支持,但是对第三种类别的支持非常有限。如果对象永远不改变,我们在服务器初始化的时候创建静态对象。如果对每个请求对象都是不同的,我们每次都创建新的对象。对于介于两者之间的对象或信息,它们的状态可能会发生变化,但是又需要提供跨越请求、跨越用户或跨越进程的共享,就要采用“对象缓存服务”了。 基本上,对象缓存就是通过在使用对象后不立即释放,而是存储在内存中并被后来的客户端请求重用,避免重新获得对象的昂贵成本。当数据第一次从数据源被检索出来后,在名为cache的内存缓冲中临时存放。 同样的数据再次被访问的时候,对象从缓存中取出来,而不是从数据源重新获取。最后,被缓存的数据在不再需要的时候从内存中释放出来。从Web应用的观点来看,什么时候指定的对象可以从内存中释放出来取决于定义一个对象变成无效的合理的间隔时间。 缓存的益处 对象缓存最主要的益处就是对应用性能的重大提升。在一个多层应用中,与其他工作比较,数据访问是一种代价非常高的操作。通过将频繁被访问的数据By keeping the frequently accessed data around并在第一次使用后不释放,我们可以避免重新获取与释放对象的开销和时间。这将会大规模提升web应用的性能,因为我们不用在每次获取数据的时候访问数据库了。 可伸缩性是使用对象缓存带来的另一个好处。因为被缓存的数据可以跨越多个session和web应用 访问,对象缓存可以成为可伸缩性Web应用设计的一个重要部分。采用对象缓存,就像对象池一样,可以帮助避免获取与释放对象的开销。 缓存的不利因素 在web应用中使用对象缓存可以带来很多益处,但是缓存对象同时也会带来一些不利的因素。 同步复杂性: 复杂性的增长依赖于数据的种类,因为需要保证被缓存数据与数据源中原始数据的一致性。要不然,被缓存的数据就会与实际数据不一致,将会导致应用中的数据错误。 Durability: 当服务器崩溃的时候,被缓存数据的修改回丢失。可以采用同步缓存避免该问题。 内存大小: 如果有大量没有用处的数据存放在缓存中,并且这些数据没有在正常的时间间隔内被释放,JVM内存大小就会变得无法接受的庞大。 缓存实例 任何不经常变化的、需要花费很长时间从数据源获取的数据都是缓存的最佳选择。这包括了几乎所有的静态数据、代码和描述列表,以及带有分页功能的查找结果 (搜索结果可以从数据源一次获取出来并存放在缓存中,等待用户在结果页面上点击页数链接时显示)。 中间件技术如EJB和CORBA允许在客户端与服务器之间的远程对象传输。像这种类型的访问,也被称为 粗粒度数据访问,用于降低昂贵的远程方法调用开销。如果这些数据传输对象 (也被称为值对象)变化不是非常频繁,它们可以被存储在缓存中。这样可以在每次客户端需要值对象时减少servlet容器访问应用服务器的次数。 那么哪些类型的数据不宜被缓存呢?这里是一些不推荐使用缓存的数据类别: 可以被网站上其他用户访问的安全信息。 用户描述信息。 私人信息,包括社会保险号码或信用卡明细信息。 经常变化的,并且不准确或不及时会引发问题的业务信息。 不应该被其它用户访问的特定于Session的数据。 使用JCS在Web门户应用中实现对象缓存(2) 缓存架构 有很多种对象缓存架构(包括开放源代码的和商业的实现)在servlet容器和应用服务器中提供了分布式缓存。下面列出了一些现在可以使用的缓存框架: 开放源代码项目 来自于Jakarta的Java Caching System (JCS) (属于Turbine项目的一部分) OSCache Commons Collections (另一个Jakarta项目) JCache API (SourceForge.net) 商业项目 SpiritCache (来自于 SpiritSoft). Coherence (Tangosol) Javlin (eXcelon) Object Caching Service for Java (Oracle) 如果你还有兴趣了解更多的缓存实现,本文最后的资源一节提供了所有这些框架的URL。 我在最初开始我对能满足我们所有的缓存需求的框架进行研究的时候,我先看到了Commons Collections和 Java Caching System API。我在最开始评估的主要标准就是容易使用、容易扩展,以及软件的成本。这两个框架都是开放源代码的,并且都来自于Apache Jakarta项目。 Commons Collections Commons Collections API以一个Java类的形式提供了对象缓存算法,名称为
LRUMap。如果你对缓存只有基本的需求,并且不是真正需要很多的扩展和缓存配置功能,那么Commons Collections可能是一个不坏的选择,但不是作为一个企业级缓存系统的正确选择。如果你选择Common Collections来实现对象缓存,你将会手工定义/配置所有的缓存参数,如:最大缓存对象的数量,一个缓存对象的最长生命周期,刷新缓存或检查对象新鲜的中断时间等。 Java Caching System Java Caching System (JCS), Jakarta Turbine项目的一部分, 与Commons Collections相比更有成熟、更具扩展性。通过为频繁访问的对象维护动态对象池的方法,它提供了提升整个系统性能的灵活、可配置的解决方案。就像在它的网站上提到的,JCS已经超越了简单地在内存中缓存对象的范围。它为一个企业级的缓存系统提供了许多必需的重要功能: 内存管理 Disk overflow (和重整) 元素分组 快速嵌套地移除 数据期限管理 可扩展的框架 完全可配置的运行时参数 远程同步 远程存储恢复 通过HTTP、TCP或者UDP协议实现可选的横向分布元素。 JCS提供了无故障点的框架, 允许完全的session失败转移(在集群环境中),包括支持最多到256个服务器的session数据分布。它也提供了配置一个或多个数据存储选项的灵活性,例如:内存缓存、磁盘缓存,或者在远程机器上的缓存。 所有这些包括在JCS中的优秀功能让它成为满足我们的web门户项目的一个优秀的对象缓存产品选择 使用JCS构造Web门户缓存框架 缓存框架的目标 在我开始设计对象缓存框架之前,我首先列出了在新的框架中需要达到的目标。以下就是目标的列表: 在web门户应用中快速访问频繁使用的数据。 将缓存中类型类似的对象进行组合。 提供可配置的缓存管理,以便我可以通过描述方式而不是编码方式修改参数。 提供可靠的和可扩展的框架,以便我将来可以转换到其它第三方的缓存API。 可以生成统计数据来监测缓存的效率,以及使用数据缓存后应用性能的提升效果。 安装和配置 在web应用中安装和配置JCS是非常简单的事情。从Jakarta Turbine网站下载
压缩文件,解压缩文件到临时目录,并拷贝JSC.jar文件(jcs-1.0-dev.jar)到servlet容器的通用目录(在我的web应用中使用的servlet容器是Tomcat,通用目录在windows下就是%TOMCAT_HOME%\common\lib,在再Unix类型的系统下就是$TOMCAT_HOME/common/lib)。你可能还需要commons-collections.jar, commons-lang.jar,和 commons-logging.jar 这些
文件存在于web应用的类路径下以便使用JCS。 对象缓存框架的主要原理在图1和图2的UML图中展示出来了 图1 图2 使用JCS在Web门户应用中实现对象缓存(3) 框架的主要原理 缓存属性 我们将所有的缓存参数配置在名为cache.ccf的属性文件中。这些参数包括缓存信息如:内存中存储的对象的最大数量,缓存时间(过了时间之后缓存的数据九自动从内存中释放),中断时间(elapsed time since last access time), 内存缓存名称(例如:缓存算法如LRU或MRU)等。在当前版本的JCS中,缓存属性文件是纯文本格式的。SpiritCache framework,一种来自SpiritSoft的Jcache API商业实现,支持XML格式的缓存配置。 确认该属性文件存放在类路径中。注意:如果你需要使用其它不同的文件来存放缓存属性的话,JCS也提供了方法来指定一个配置文件的名称。请参考JCS的 Javadocs学习如何从其它非缺省的属性文件中读取缓存配置信息。 下面列出来的是web应用使用缓存功能需要了解的一些Java类。这些类存放在本文的示例代码的common.caching包中。这些类的Javadocs也包括在源代码压缩包中。 (图2中的类图显示了这些Java类的关系) ICacheManager 这是客户应用实现所有缓存有关操作(如:存储、访问以及释放缓存中的数据)的主接口(契约)。客户程序可以是JSP、Struts Action类,或者就是一个POJO对象。创建该接口用于对客户端隐藏所有缓存的实现细节,这样当我们将来需要切换另一种的第三方缓存API的时候无需对客户端代码做任何调整。 BaseCacheManager
这是web门户缓存框架的主类。是对ICacheManager 接口的最基本实现。创建BaseCacheManager 用于在一个类中集中所有缓存相关的方法。它被设计为单例模式保证在servlet容器的JVM中有且仅有一个ICacheManager 的实例被创建。在多web服务器/servlet容器实例共同处理web请求的集群环境中,每个JVM将会创建独立的ICacheManager 实例。如果将来你要转换到不同的