`

OScache的使用(Java对象)

阅读更多

今天下午,想了好久,终于决定要用OSCache来缓存我的报表统计了,要不觉得效率很低。呵呵,当然我是选择了opensymphony的OSCache,它可以缓存任何Java对象以及JSP程序,以下是今天下午的成果,写了一个通用类,再在action里面缓存一下。试了一下,效果还算不错。
package com.finegold.digimus.comm;

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

/**
 * @author 汪心利 2007-7-5
*@copyRight WWW.FINEGOLD.COM.CN
*
*/
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
*@copyRight WWW.FINEGOLD.COM.CN
 */
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
 <filter>
      <filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
 <init-param>
         <param-name>time</param-name>
         <param-value>600</param-value>
      </init-param>
      <init-param>
         <param-name>scope</param-name>
         <param-value>session</param-value>
      </init-param>
</filter>

分享到:
评论

相关推荐

    OSCache配置说明文档

    OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。拥有全面的API--OSCacheAPI给你的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许...

    oscache文档

    OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。 拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。 永久缓存--缓存能随意的写入硬盘,...

    oscache的例子

    (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。 (2) 拥有全面的API:OSCache API允许你通过编程的方式来控制所有的OSCache特性。 (3) 永久缓存:缓存能被配置写入硬盘...

    oscache(JSP定制标记应用)

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

    oscache-2.4.1-full.rar

    (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。 (2) 拥有全面的API:OSCache API允许你通过编程的方式来控制所有的OSCache特性。 (3) 永久缓存:缓存能被配置写入...

    hibernate+oscache实现二级缓存实例

    非常实用的一个例子,有关于缓存对象 list 或缓存地址或jsp或其它页面,在实例中都有,须望可以帮到大家

    达内java培训目录

    Java面向对象 面向对象特性:封装、继承、多态等,面向对象程序设计,基础设计模式等。 掌握面向对象的基本原则以及在编程实践中的意义;掌握Java面向对象编程基本实现原理。 实训项目一:Tetris项目开发 第二阶段...

    redis基础.rar

    要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定引用对象的缓存,最简单也最不实用,首要的问题就是保存对象的有效性以及周期无法控制,这样很容易就导致...

    IOIF基于开源技术的JAVA开发框架

    软件开发思想从面向过程到OOP面向对象,再到AOP面向方面,每一次新思想的提出都能够降低对程序员的要求,加快软件开发的进度。该框架在实现的过程中提出一个新的概念IOP“面向项目的开发”。在这个思想的指导下,...

    hibernate 3中的缓存小结

    l OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。 l SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。...

    iBATIS实战

    8.5.1 使用Java代码 147 8.5.2 使用存储过程 150 8.5.3 同iBATIS相比较 152 8.6 动态SQL的未来 152 8.6.1 简化的条件标签 152 8.6.2 表达式语言 153 8.7 小结 153 第三部分 真实世界中的iBATIS 第9章 使用高速缓存...

    ibatis 开发指南(pdf)

    使用ibatis 提供的ORM 机制,对业务逻辑实现人员而言,面对的是纯粹的Java 对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求...

Global site tag (gtag.js) - Google Analytics