博客
关于我
OSCACHE介绍
阅读量:795 次
发布时间:2023-02-26

本文共 2901 字,大约阅读时间需要 9 分钟。

Cache技术在J2EE系统中的应用:基于OSCache的实现

Cache(缓存)技术是提升系统响应速度、改善运行性能的重要手段,尤其在Web应用中,通过缓存页面输出结果,可以显著提升系统性能。本文将介绍一个实现J2EE框架中Web应用层缓存功能的开放源代码项目——OSCache。通过应用OSCache,我们不仅可以实现常规的缓存功能,还能有效改善系统的稳定性。


一、面临的问题

在信息系统建设过程中,我们常常遇到以下两类问题:

1. 基础数据的变更问题

基础数据内容短时间内通常不会发生变化,但在较长时间内可能会动态增加或减少。例如,电子商务中的送货区域定义,可能在短期内不变,但随着业务扩展,送货区域信息可能需要动态更新。这种情况下,每次展示送货区域信息都需要与数据库交互,导致系统性能下降。

2. 统计报表问题

统计报表通常是周期性生成的,可能每半个月或每月更新一次。这些报表需要生成图形文件(如PDF、Word、Excel等),文件生成过程会消耗大量系统资源,严重影响系统性能。


2. 问题的共同点

通过对上述问题的比较分析,可以发现以下共同点:

  • 被处理内容短时间内不变,可作为静态内容处理
  • 在不太长的时间内,内容可能会发生变化,需作为动态内容处理
  • 在合理时间区段内,内容变化对系统影响较小
  • 对内容的处理动作对系统性能有较大消耗

  • 3. 解决方法

    缓存技术可以有效解决上述问题:

  • 缓存信息
    当基础数据或统计报表首次被访问时,系统从数据库获取内容并生成图形文件,然后将这些信息存入缓存中。
  • 缓存响应
    在后续访问时,系统首先检查缓存信息,若符合缓存规则且信息未过期,则直接从缓存中获取响应;若不符合条件,则重复上述处理流程。这种方式大大减少了与数据库的交互,降低了系统性能消耗。

  • 4. OSCache简介

    OSCache是OpenSymphony组织开发的一个J2EE架构中Web应用层缓存技术实现组件。它通过缓存技术解决了上述问题,并提供了丰富的功能特性。当前最新版本为2.3.2,以下是其主要特点:

    主要特征

  • 兼容多种Web服务器
    支持OrionServer、Macromedia JRun、BEA WebLogic、IBM Websphere等多种JSP服务器。
  • 可选缓存区
    支持内存、硬盘或两者结合作为缓存区,满足不同的性能需求。
  • 灵活的缓存系统
    支持按页面或页面部分内容缓存,提供灵活的缓存级别设置。
  • 容错功能
    在数据库无法访问时,缓存可以提供默认响应,保障系统稳定性。
  • 其他特性
    包括集群支持、缓存主动刷新等功能,详细信息可参考OpenSymphony官网。

  • 5. OSCache的安装

    OSCache的安装主要涉及以下步骤:

  • 下载与解压
    OpenSymphony官网下载最新版本,解压到C:\oscache目录下。
  • 创建Web应用
    新建一个J2EE-style Web应用。
  • 添加OSCache组件
    oscache.jar放入WEB-INF/lib目录。
  • 处理依赖文件
    commons-logging.jarcommons-collections.jar放入类路径。
  • 配置文件
    oscache.propertiesoscache.tld放入WEB-INF/classes目录。
  • 修改web.xml
    web.xml中添加对OSCache提供的Taglib支持。

  • 6. 开始使用OSCache

    OSCache提供了两种主要的缓存方式:

    6.1 JSP部分内容缓存

    OSCache提供了丰富的缓存标签,主要特点如下:

    • cache标签属性说明

      • key:唯一标识缓存内容的关键词,默认为页面URI和请求参数。
      • scope:缓存范围,可选applicationsession
      • time:缓存超时时间,默认为3600秒。
      • duration:指定缓存失效时间,使用日期格式或PT表示时间段。
      • refresh:决定是否强制刷新缓存内容。
      • mode:设置缓存模式,可选silent(不将缓存内容加入响应)。
    • 示例分析

      • 默认缓存:
        <%--自己的JSP代码内容--%>
      • 自定义key和时间:
      • 动态key:

    6.2 用CacheFilter实现页面级缓存

    通过配置CacheFilter,可以对特定页面或所有页面进行缓存。以下是常见配置示例:

    • 缓存单个文件
      CacheFilter
      /testContent.jsp
    • 缓存所有JSP页面
      CacheFilter
      *.jsp
    • 自定义缓存属性
      CacheFilter
      time
      600
      scope
      session

    7. 配置

    oscache.properties配置说明

  • cache.memory
    默认为true,表示使用内存缓存。
  • cache.capacity
    缓存对象的最大数量,支持负数表示无限制。
  • cache.algorithm
    可选LRUCacheFIFOCacheUnlimitedCache,默认为LRUCache
  • cache.blocking
    默认为true,避免读取脏数据。
  • cache.path
    硬盘缓存路径,需确保目录存在且有写入权限。
  • cache.persistence.overflow.only
    默认false,表示在内存不足时仍使用硬盘缓存。
  • cache.key
    缓存的唯一标识符,默认为__oscache_cache
  • cache.cluster.multicast.ip
    集群时的多播IP地址,默认为231.12.21.132

  • 8. 性能测试结果

    测试环境

    • 系统平台:Windows 2000高级服务器(P3 800MHz/512MB内存)
    • Web服务器:WebSphere 5.0
    • 数据库服务器:MySQL 4.0.18-nt
    • 性能测试工具:Apache JMeter

    测试结果

    • 使用缓存后:总耗时20569毫秒
    • 不使用缓存前:总耗时22870毫秒
    • 详细结果:请参考下载内容中的测试报告。

    9. 总结

    在J2EE系统中,缓存技术可以有效解决基础数据变更和统计报表生成等性能瓶颈问题。通过应用OSCache,我们不仅实现了常规的缓存功能,还可以灵活配置缓存规则,显著提升系统性能和稳定性。OSCache的集群支持、容错功能和灵活的缓存区选择等特性,使其成为J2EE系统中缓存的优选方案。

    转载地址:http://mzvfk.baihongyu.com/

    你可能感兴趣的文章