使用JCS在Web门户应用中实现对象缓存(1)

原创 2004年04月22日 14:50:00

使用JCSWeb门户应用中实现对象缓存<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

在我最近的web门户应用开发工作中,我们需要在Servlet容器(Tomcat)的内存中存储一些查找数据(例如:比率更新数据、状态和产品列表),这样我们不需要在每次访问数据的时候进行数据库查找。同时,我们也需要定期地刷新存储在内存中的数据以保证其新鲜和准确。我们也需要一种机制在不同的时间间隔对存储在内存中的不同类型的数据进行刷新。例如,比率更新数据需要每天刷新一次,而查找类型的数据则可以在内存中保留很长一段时间。对象缓存是最方便地达到上述所有目的的完美解决方案。

对象缓存

最恰当的对象缓存的定义可以在Object Caching Service for Java (OCS4J)的功能规范文档中找到 ,它是这样定义的:

服务器必须将信息和可执行对象分为三种基本类别管理: 永远不会改变的对象,每次请求都会发生改变的对象,以及在两者之间的对象。Java 对前两种对象的处理提供了很好的支持,但是对第三种类别的支持非常有限。如果对象永远不改变,我们在服务器初始化的时候创建静态对象。如果对每个请求对象都是不同的,我们每次都创建新的对象。对于介于两者之间的对象或信息,它们的状态可能会发生变化,但是又需要提供跨越请求、跨越用户或跨越进程的共享,就要采用“对象缓存服务”了。

基本上,对象缓存就是通过在使用对象后不立即释放,而是存储在内存中并被后来的客户端请求重用,避免重新获得对象的昂贵成本。当数据第一次从数据源被检索出来后,在名为cache的内存缓冲中临时存放。 同样的数据再次被访问的时候,对象从缓存中取出来,而不是从数据源重新获取。最后,被缓存的数据在不再需要的时候从内存中释放出来。从Web应用的观点来看,什么时候指定的对象可以从内存中释放出来取决于定义一个对象变成无效的合理的间隔时间。

缓存的益处

对象缓存最主要的益处就是对应用性能的重大提升。在一个多层应用中,与其他工作比较,数据访问是一种代价非常高的操作。通过将频繁被访问的数据By keeping the frequently accessed data around 并在第一次使用后不释放,我们可以避免重新获取与释放对象的开销和时间。这将会大规模提升web应用的性能,因为我们不用在每次获取数据的时候访问数据库了。

可伸缩性是使用对象缓存带来的另一个好处。因为被缓存的数据可以跨越多个sessionweb应用 访问,对象缓存可以成为可伸缩性Web应用设计的一个重要部分。采用对象缓存,就像对象池一样,可以帮助避免获取与释放对象的开销。

缓存的不利因素

web应用中使用对象缓存可以带来很多益处,但是缓存对象同时也会带来一些不利的因素。

  • 同步复杂性: 复杂性的增长依赖于数据的种类,因为需要保证被缓存数据与数据源中原始数据的一致性。要不然,被缓存的数据就会与实际数据不一致,将会导致应用中的数据错误。

  • Durability: 当服务器崩溃的时候,被缓存数据的修改回丢失。可以采用同步缓存避免该问题。

  • 内存大小: 如果有大量没有用处的数据存放在缓存中,并且这些数据没有在正常的时间间隔内被释放,JVM 内存大小就会变得无法接受的庞大。

缓存实例

任<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />何不经常变化的、需要花费很长时间从数据源获取的数据都是缓存的最佳选择。这包括了几乎所有的静态数据、代码和描述列表,以及带有分页功能的查找结果 (搜索结果可以从数据源一次获取出来并存放在缓存中,等待用户在结果页面上点击页数链接时显示)

中间件技术如EJBCORBA允许在客户端与服务器之间的远程对象传输。像这种类型的访问,也被称为 粗粒度数据访问, 用于降低昂贵的远程方法调用开销。如果这些数据传输对象 (也被称为值对象) 变化不是非常频繁,它们可以被存储在缓存中。这样可以在每次客户端需要值对象时减少servlet容器访问应用服务器的次数。

那么哪些类型的数据不宜被缓存呢?这里是一些不推荐使用缓存的数据类别:

  • 可以被网站上其他用户访问的安全信息。

  • 用户描述信息。

  • 私人信息,包括社会保险号码或信用卡明细信息。

  • 经常变化的,并且不准确或不及时会引发问题的业务信息。

不应该被其它用户访问的特定于Session的数据。

使用JCS在Web门户应用中实现对象缓存(2)

缓存架构有很多种对象缓存架构(包括开放源代码的和商业的实现)在servlet容器和应用服务器中提供了分布式缓存。下面列出了一些现在可以使用的缓存框架:开放源代码项目来自于Jakarta的Java Ca...
  • ah_cai
  • ah_cai
  • 2004年04月22日 14:51
  • 1498

使用JCS在Web门户应用中实现对象缓存(3)

框架的主要原理缓存属性我们将所有的缓存参数配置在名为cache.ccf的属性文件中。这些参数包括缓存信息如:内存中存储的对象的最大数量,缓存时间(过了时间之后缓存的数据九自动从内存中释放),中断时间(...
  • ah_cai
  • ah_cai
  • 2004年04月22日 14:51
  • 2020

五步教你使用JCS快速搭建缓存环境

JCS是Jakarta的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将对象缓冲到内存、硬盘。具有缓冲对象时间过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用。对于一...
  • u010405751
  • u010405751
  • 2013年05月22日 19:43
  • 564

JCS 缓存

JCS 概述 JCS 是一个用 Java 语言编写的缓存系统,可以使用它来创建 Java 桌面和 Web 应用程序。它提供了在缓存器中存储数据、从缓存器中删除数据等方便机制。 使用 JCS...
  • sjzs5590
  • sjzs5590
  • 2012年08月21日 19:58
  • 1234

jcs开源缓存框架介绍

JCS是Jakarta的项目Turbine的子项目。它是一个复合式的缓冲工具。可以将对象缓冲到内存、硬盘。具有缓冲对象时间过期设定。还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用。对于一...
  • HUXU981598436
  • HUXU981598436
  • 2015年07月23日 11:15
  • 457

Web系统中缓存的应用

一、什么是缓存           缓存就是数据交换的缓冲区,在web系统中,从浏览器到服务器,从服务器到数据库,从服务器到资源服务器,每一步都可以设置缓存来避免直接的I/O操作,从而提高网站性...
  • wsdydmw
  • wsdydmw
  • 2015年07月29日 18:35
  • 1146

jcs缓存机制

JCS缓存介绍 1.     概要  JCS是Jakarta的项目Turbine的子项目,它是复合式的缓冲工具,具有配置灵活的特点。JCS提供内存、硬盘、分布式架构、构建缓存服务器四种方式来实现对...
  • wby__2005
  • wby__2005
  • 2013年11月27日 15:14
  • 454

JCS和Redis

在执行应用程序的时候,若数据库进行读操作时,在中间增加一些缓存来提高效率。 一般将配置数据进行加入缓存,缓存一般有两种类型 A:JCS B:Redis...
  • u011344885
  • u011344885
  • 2016年07月30日 11:30
  • 255

浅谈我对JCS 的理解

JCS 是Java 中缓存的一种实现,支持将数据缓存到内存和硬盘中,支持设置缓存对象的有效时长。 我认为可以这么理解JCS:客户端向服务器发出请求,服务器就先去缓存中查一下有没有客户端请求的数据,...
  • N199109
  • N199109
  • 2015年03月11日 14:13
  • 394

Web前端离线缓存应用

项目中需要将在线的Web改造成支持离线版本的Web应用,思考了四种方法: 1.Manifest文件 它的特点有以下三点: 1.1 Manifest文件有变化才有更新 1.2一次必须更新完Man...
  • z127688
  • z127688
  • 2015年07月26日 18:34
  • 759
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用JCS在Web门户应用中实现对象缓存(1)
举报原因:
原因补充:

(最多只允许输入30个字)