`

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-java缓存框架

    - **对象缓存**:osCache允许开发者将Java对象直接放入缓存,便于快速检索。 - **内存管理**:自动管理内存,当内存不足时,可基于LRU(Least Recently Used)策略进行对象的淘汰。 - **持久化**:支持缓存数据的...

    Oscache使用教程

    Oscache基于哈希映射实现,它在内存中创建一个对象存储区域,用于存放数据。当应用程序需要数据时,首先会检查缓存中是否存在,如果存在则直接返回,称为缓存命中;若不存在,则从底层数据源(如数据库)获取数据,...

    oscache对象缓存

    oscache,全称OpenSymphony OSCache,是一个广泛使用的开源Java对象缓存框架,它允许开发者将数据存储在内存中,以减少对数据库的访问,从而提升应用的响应速度。本文将深入探讨oscache的核心概念、工作原理以及如何...

    oscache缓存技术

    - **缓存对象**:osCache允许开发者将任何Java对象存储到缓存中,以便后续请求可以直接从内存中获取,而无需再次进行昂贵的数据库查询或其他计算操作。 - **缓存区域**:osCache支持多个缓存区域,每个区域可以有...

    oscache缓存技术入门实例

    osCache 是一个开源的、基于Java的缓存框架,它为Java应用程序提供了高效且可配置的内存缓存功能。在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念...

    OSCache 缓存对象的总结

    1. **对象缓存**:OSCache 允许开发者将Java对象直接放入缓存,通过Key-Value的形式进行存储。这使得能够快速地查找和检索常用对象,无需每次都去数据库或其他慢速资源中查询。 2. **缓存策略**:它支持多种缓存...

    OsCache缓存框架使用示例

    OsCache是Java应用程序中常用的缓存框架,它能够有效地提高应用程序的性能,通过将经常访问的数据存储在内存中,减少对数据库或其他数据源的访问,从而降低系统负载。本示例将通过一个天气预报Web服务的场景,详细...

    OSCache需要的包

    OSCache 是一个高效的、开源的缓存框架,主要用于 Java 应用程序,它提供了一种在内存中存储对象的方式,以提高数据访问速度并减轻数据库的负载。在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,...

    OSCache配置说明文档

    1. 缓存任何对象:无论是部分JSP页面、HTTP请求,还是自定义的Java对象,OSCache都能进行有效缓存。 2. 完整的API:提供丰富的API接口,便于开发者根据需求控制缓存行为。 3. 永久缓存:支持将缓存数据持久化到硬盘...

    oscache缓存配置

    在Java项目中,通常将其添加到项目的类路径(classpath)中,以便程序能够找到并使用osCache的相关类。 接着,我们需要配置osCache的行为,这通常通过oscache.properties文件实现。这个文件定义了缓存的各种参数,...

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

    **osCache 是一款高效、轻量级的 Java 缓存框架,主要用于提高应用程序的性能和减少对数据库的访问。在本文中,我们将深入探讨 osCache 的核心概念、使用场景以及如何在项目中有效地利用它。** ### 一、缓存的重要...

    OSCache学习例子 实例

    4. **使用OSCache**:将需要缓存的对象放入OSCache,例如: ```java Object object = ...; Cache cache = CacheManager.getInstance().getCache("myCache"); cache.put(new Element("key", object)); ``` 5. *...

    oscache.jar

    1. **对象缓存**:OSCache支持对任何Java对象的缓存,无论是基本类型还是复杂对象。它提供了内存中的缓存管理,允许开发者根据需要设置缓存策略,如过期时间、容量限制等。 2. **分布式缓存**:在多服务器环境中,...

    oscache的一些使用

    - **缓存项**:缓存中的单个数据单元,可以是任何Java对象。 - **缓存区域**:将缓存按照功能或数据类型划分的逻辑组,方便管理。 ### 2. osCache的安装与配置 - **添加依赖**:将osCache的JAR包添加到项目的类...

    oscache-2.2jar包

    - **序列化支持**:能够缓存任何可序列化的Java对象。 - **缓存监控**:提供了统计信息和可视化工具,便于监控和优化缓存性能。 在实际开发中,osCache可以通过Spring框架等进行集成,以实现更灵活的配置和管理。...

    SSM的整合+OScache页面缓存+freemark模板

    OScache是Java的一个开源缓存框架,它可以用来缓存任何Java对象,包括页面。在SSM项目中引入OScache,可以在服务器端对经常访问的页面进行缓存,提高页面加载速度,减轻服务器压力。配置OScache主要包括设置缓存策略...

    oscache的例子

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

    oscache的demo

    osCache允许开发者将Java对象存储到内存中,以避免每次需要这些对象时都去重新计算或从数据库中检索。这显著提升了应用程序的响应速度。例如,`TestOsCache`可能包含一个示例,演示如何创建和存储自定义对象,并在...

Global site tag (gtag.js) - Google Analytics