使用JCS在Web门户应用中实现对象缓存(1)
来源:互联网 发布:碱性食物 知乎 编辑:程序博客网 时间:2024/06/09 23:53
在我最近的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容器访问应用服务器的次数。
那么哪些类型的数据不宜被缓存呢?这里是一些不推荐使用缓存的数据类别:
- 可以被网站上其他用户访问的安全信息。
- 用户描述信息。
- 私人信息,包括社会保险号码或信用卡明细信息。
- 经常变化的,并且不准确或不及时会引发问题的业务信息。
- 使用JCS在Web门户应用中实现对象缓存(1)
- 使用JCS在Web门户应用中实现对象缓存(1)
- 使用JCS在Web门户应用中实现对象缓存(2)
- 使用JCS在Web门户应用中实现对象缓存(3)
- 使用JCS在Web门户应用中实现对象缓存(2)
- 使用JCS在Web门户应用中实现对象缓存(3)
- 用Jcs缓存机制创建更快的Web应用
- JCS实现分布式缓存共享
- 使用 Struts portlet 在门户应用程序中实现页面导航
- 使用 Struts portlet 在门户应用程序中实现页面导航
- 使用 Struts portlet 在门户应用程序中实现页面导航
- JCS 缓存
- 用JCS实现javaEE项目缓存
- JCS实现项目缓存总结之二
- 使用JCS快速搭建缓存环境
- 使用JCS快速搭建缓存环境
- 在Web应用中使用Quatz实现任务调度步骤
- JCS的学习与应用三:内存缓存应用
- jsp的开发网站在linux下的部署
- 两种方法删除ArrayList里重复元素
- 一个JAVA后台程序的设计方案
- jdbc应用--数据库连接全集
- Tomcat虚拟目录设置
- 使用JCS在Web门户应用中实现对象缓存(1)
- 使用JCS在Web门户应用中实现对象缓存(2)
- 使用JCS在Web门户应用中实现对象缓存(3)
- Sybase JDBC驱动的改进
- Sybase JDBC驱动的改进 2
- Sybase JDBC驱动的改进 3
- WEB应用中的基本身份验证和表单身份验证
- Turbine与Jbuilder集成方法
- turbine下的数据库连接