`
itwangxinli
  • 浏览: 143574 次
  • 性别: 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使用文档

    OSCache使用文档OSCache使用文档OSCache使用文档OSCache使用文档OSCache使用文档OSCache使用文档OSCache使用文档OSCache使用文档OSCache使用文档

    oscache 使用介紹

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

    Oscache使用手册

    Cache是一种用于提高系统响应速度、改善系统运行性能的技术。尤其是在Web应用中,通过缓存页面的...OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。。。。

    OSCache使用说明

    OSCache是当前运用最广的缓存方案, Hibernate,jsp,页面等都对其有支持,下面简单介绍一下OSCache的配置和使用过程

    oscache的使用

    oscache的使用

    oscache的使用实例和详解

    缓存框架oscache 的使用实例和详细解释,

    OSCache配置说明文档

    OSCache由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决...

    OsCache缓存框架使用示例

    这里结合 天气预报的webservice 展示了OsCache框架的具体使用方法 项目可直接运行 ,代码简洁清晰

    oscache-2.1.jar

    oscache-2.1.jar oscache-2.1.jar

    oscache,缓存机制的使用

    oscache,java,缓存机制的使用

    oscache缓存使用总结.doc

    oscache缓存使用总结

    oscache(JSP定制标记应用)

    javaweb做页面缓存常用,OSCache是一个工业级的J2EE缓存实现。OSCache不但能缓存java对象,还可以缓存页面,http请求和二进制内容,例如pdf文件等。通过应用OSCache,我们不但可以实现通常的Cache功能,还能够改善...

    Oscache框架的搭建步骤

    使用oscache进行缓存,大大提高web系统运行效率

    用OSCache进行缓存对象

    1、OSCache是什么? 2、OSCache的特点 3、有关“用OSCache进行缓存对象”的研究

    oscache-java缓存框架

    oscache-java缓存框架插件和安装教程,使用教程一步到位

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

    oscache的详细文档,很easy,好好用。

    oscache文档

    OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的...

    oscache的例子

    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存...

    oscache缓存技术入门实例

    oscache缓存技术入门实例

Global site tag (gtag.js) - Google Analytics