`
itwangxinli
  • 浏览: 146105 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
今天下午,想了好久,终于决定要用OSCache来缓存我的报表统计了,要不觉得效率很低。呵呵,当然我是选择了opensymphony的OSCache,它可以缓存任何Java对象以及JSP程序,以下是今天下午的成果,写了一个通用类,再在action里面缓存一下。试了一下,效果还算不错。
package com.finegold.digimus.comm;

import com.opensymphony.oscache.base.persistence.CachePersistenceException;

/**
 * @author 汪心利 2007-7-5
[email=*@copyRight]*@copyRight[/email] [url=http://www.finegold.com.cn/]WWW.FINEGOLD.COM.CN[/url]
*
*/
public interface Cache {
 /**
  * 根据key获取cache里的对象
  * 
  * @param key
  * @return
  * @throws CachePersistenceException
  */
 Object get(Object key) throws CachePersistenceException;

 /**
  * 根据key以及time获取cache里的对象,对应 inputOSCache(Object key, Object value, int
  * i)方法添加进去的对象
  * 
  * @param key
  * @param time
  * @return
  * @throws CachePersistenceException
  */
 Object get(Object key, int time) throws CachePersistenceException;

 /**
  * 将object添加cache
  * 
  * @param key
  * @param value
  * @throws CachePersistenceException
  */
 void inputOSCache(Object key, Object value)
   throws CachePersistenceException;

 /**
  * 将object添加cache
  * 
  * @param key
  * @param value
  * @param i
  * @throws CachePersistenceException
  */
 void inputOSCache(Object key, Object value, int i)
   throws CachePersistenceException;

 /**
  * 根据key删除object
  * 
  * @param key
  * @throws CachePersistenceException
  */
 void remove(Object key) throws CachePersistenceException;

 /**
  * 清空cache
  * 
  * @throws CachePersistenceException
  */
 void clear() throws CachePersistenceException;

 /**
  * 销毁cache
  * 
  * @throws CachePersistenceException
  */
 void destroy() throws CachePersistenceException;

 /**
  * 根据time 获取key
  * 
  * @param time
  * @return
  * @throws CachePersistenceException
  */
 Object getkey(int time) throws CachePersistenceException;
}


接口的实现类:
package com.finegold.digimus.comm;

/**
 * @author BlueSKy_itwangxinli 2007-7-5 [email=*@copyRight]
*@copyRight[/email] [url=http://www.finegold.com.cn/]WWW.FINEGOLD.COM.CN[/url]
 */
import java.util.Properties;

import org.apache.commons.lang.RandomStringUtils;

import com.opensymphony.oscache.base.EntryRefreshPolicy;
import com.opensymphony.oscache.base.NeedsRefreshException;
import com.opensymphony.oscache.base.persistence.CachePersistenceException;
import com.opensymphony.oscache.general.GeneralCacheAdministrator;
import com.opensymphony.oscache.web.filter.ExpiresRefreshPolicy;

/**
 * OSCache 缓存共用类
 * 
 * @author 汪心利 2007-7-5
 */
public class OSCache implements Cache {
 /**
  * 通用缓存管理类 administrator
  */
 private GeneralCacheAdministrator cache;

 private static OSCache instance;

 public OSCache() {
  this.cache = new GeneralCacheAdministrator();
 }

 /**
  * 指定加载加载cache.propeties fiel 默认情况下加载classes目录下的OScache.properties
  * 
  * @param prop
  */
 public OSCache(Properties prop) {
  this.cache = new GeneralCacheAdministrator(prop);
 }

 /**
  * 返回OSCache 的Instance 单态模式
  * 
  * @return
  */
 public synchronized static OSCache getInstance() {

  if (instance == null) {
   instance = new OSCache();
  }
  return instance;
 }

 /**
  * 设置缓存容量 default value 请查看oscache配置文件,OSCache系统本身默认值unlimited
  * 
  * @param cacheCapacity
  */
 public void setCacheCapacity(int cacheCapacity) {
  this.cache.setCacheCapacity(cacheCapacity);
 }

 /**
  * 根据Key获取cache里缓存的object
  * 
  * @param key
  *            查找关键字
  */
 public Object get(Object key) throws CachePersistenceException {
  try {
   return this.cache.getFromCache(String.valueOf(key));
  } catch (NeedsRefreshException e) {
   cache.cancelUpdate(String.valueOf(key));
   return null;
  }
 }

 /**
  * 根据key和time获取缓存的object
  * 
  * @param key
  *            查找的key
  * @param time
  *            (最准确的含义-->)How long the object can stay in cache in seconds
  */
 public Object get(Object key, int time) throws CachePersistenceException {
  try {
   return this.cache.getFromCache(String.valueOf(key), time);
  } catch (NeedsRefreshException e) {
   cache.cancelUpdate(String.valueOf(key));
   return null;
  }
 }

 /**
  * 尽量不要使用该方法 根据time 获取key
  * 
  * @param time
  *            时间
  */
 public Object getkey(int time) throws CachePersistenceException {
  String key = RandomStringUtils.randomAlphanumeric(10);
  try {
   while (this.cache.getFromCache(key) != null) {
    key = RandomStringUtils.randomAlphanumeric(10);
   }
   return key;
  } catch (NeedsRefreshException e) {
   return key;
  }
 }

 /**
  * 缓存对象
  */
 public void inputOSCache(Object key, Object value)
   throws CachePersistenceException {
  this.cache.putInCache(String.valueOf(key), value);
 }

 /**
  * 缓存对象
  * 
  * @param key
  *            缓存对象的key
  * @param value
  *            缓存对象的value
  * @param n
  *            缓存对象有效时间
  */
 public void inputOSCache(Object key, Object value, int n)
   throws CachePersistenceException {
  EntryRefreshPolicy Policy = new ExpiresRefreshPolicy(n);
  this.cache.putInCache(String.valueOf(key), value, Policy);
 }

 /**
  * 根据key从cache里 删除object
  * 
  * @param 要删除缓存对象的key
  */
 public void remove(Object key) throws CachePersistenceException {
  this.cache.flushEntry(String.valueOf(key));
 }

 /**
  * 清空所有的缓存
  */
 public void clear() throws CachePersistenceException {
  this.cache.flushAll();
 }

 /**
  * 销毁缓存
  */
 public void destroy() throws CachePersistenceException {
  this.cache.destroy();
 }
}

配置web.xml
      CacheFilter
com.opensymphony.oscache.web.filter.CacheFilter
 
         time
         600
      
      
         scope
         session
      

分享到:
评论

相关推荐

    Oscache使用教程

    **Oscache使用教程** Oscache是一款开源的Java缓存解决方案,主要用于提高Web应用程序的性能,通过在内存中存储经常访问的数据,避免了频繁的数据库查询,从而减少了系统响应时间。本文将深入探讨Oscache的基本原理...

    oscache 使用介紹

    OSCache是OpenSymphony这个开源项目众多Projects中的一个。他是一个高效的J2EE缓存框架,能够很好的解决动态网站速度的问题。

    oscache的使用实例和详解

    一个典型的osCache使用实例可能是这样的: ```java import net.sf.oscache.CacheManager; public class OSCacheExample { public static void main(String[] args) { CacheManager cacheManager = CacheManager....

    教你如何用好oscache的详细文档

    在本文中,我们将深入探讨 osCache 的核心概念、使用场景以及如何在项目中有效地利用它。** ### 一、缓存的重要性 在Web应用中,缓存是一种常见的优化手段,它能够显著提升系统的响应速度,减轻数据库的压力。当...

    oscache缓存技术入门实例

    四、osCache使用示例 1. 添加依赖:在你的项目中引入osCache的JAR文件或通过Maven/Gradle等构建工具添加依赖。 2. 初始化缓存:在应用程序启动时初始化osCache,这通常在Servlet容器的初始化回调方法中完成。 ```...

    oscache-2.1.1-full.zip_full_oscache_oscache 2_oscache2

    osCache 是一款强大的缓存解决方案,尤其在Java开发中被广泛使用。它不仅提供了类似于Map的数据结构操作,还具备内置的集群支持,使得数据缓存可以在分布式环境中高效地进行。这个"oscache-2.1.1-full.zip"压缩包...

    OSCache使用说明

    OSCache 是一个广泛使用的缓存解决方案,它支持多种技术,如 Hibernate、JSP 和页面缓存。本篇文章将深入探讨 OSCache 的配置和使用方法。 首先,安装 OSCache 包括以下几个步骤: 1. 从官方网站...

    OSCache使用文档

    OSCache是一个高性能、易于使用的缓存组件,主要用于Web应用程序中数据的缓存管理。它可以极大地提高Web应用的性能,通过减少对数据库或其他后端系统的访问频率来降低服务器负载。OSCache支持多种缓存策略,并且可以...

    Oscache-入门教程.doc

    在 JSP 页面中,可以通过以下方式使用 OSCache 标签库进行缓存配置: ```jsp <%@ taglib uri="http://www.opensymphony.com/oscache" prefix="oscache" %> <oscache:cache page="true" timeToLive="600"> <!-- ...

    Cache技术--OSCache

    ### 三、OSCache使用指南 #### 1. 安装与配置 - **下载**:从OpenSymphony官网下载OSCache的最新版本。 - **解压**:将下载的文件解压到指定目录。 - **新建Web应用**:创建一个新的Web项目。 - **集成OSCache**:...

    OSCACHE配置,文档,示例,JAR包

    以下是一个简单的OSCache使用示例: ```java import net.sf.oscache.CacheManager; import net.sf.oscache.Cache; // 初始化缓存管理器 CacheManager.init("path/to/oscache.xml"); // 获取或创建名为"myCache"的...

    oscache 集群和数据同步

    osCache使用了基于JGroups的组通信协议来实现集群间的通信,JGroups提供了可靠的组成员发现和消息传递机制。 三、数据同步机制 osCache的数据同步策略主要基于两种机制:推送(Push)和拉取(Pull)。 1. 推送...

    Oscache攻略

    - **内存管理**:Oscache使用了一种基于LRU(Least Recently Used)策略的内存管理机制,自动移除最少最近使用的缓存项以保持内存使用在设定的阈值内。 - **缓存预热**:支持预加载缓存,使得应用启动后即可快速...

    OsCache缓存框架使用示例

    本示例将通过一个天气预报Web服务的场景,详细介绍OsCache的使用方法。 首先,我们需要了解OsCache的基本概念。OsCache的核心是基于哈希表的数据结构,它可以在内存中存储对象,支持自动过期策略,可以设置缓存项的...

    OSCache配置说明文档

    本文档详细介绍了OSCache的配置与使用,旨在为开发者提供一份全面的参考指南。OSCache是由OpenSymphony开发的开源缓存框架,它为J2EE应用程序提供了高效、灵活的缓存解决方案。 文档介绍 文档目的: 本文档的主要...

    Oscache简单实例

    **Oscache使用示例** 1. **引入依赖**:在项目中添加Oscache的jar包,或者通过Maven或Gradle等构建工具进行依赖管理。 2. **配置初始化**:在`web.xml`或通过代码创建`CacheManager`,加载`oscache.properties`配置...

    oscache,缓存机制的使用

    标题与描述概述的知识点主要集中在oscache的使用及其在Java环境下的配置与实施。oscache是一种缓存机制,主要用于提高Web应用的响应速度和优化系统性能。以下是对这些知识点的详细解析: ### oscache简介 oscache...

Global site tag (gtag.js) - Google Analytics