今天下午,想了好久,终于决定要用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

CacheFilter

com.opensymphony.oscache.web.filter.CacheFilter

time

600

scope

session

java oscache 使用_OScache的使用(Java对象)相关推荐

  1. java oscache 缓存_Java]用OSCache进行缓存对象

    Java]用OSCache进行缓存对象 1.OSCache是什么? OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能.OSC ...

  2. Java通过泛型的模板类型实例化对象

    Java通过泛型的模板类型实例化对象 最近自己研究了下mvvm框架,使用泛型的方式可节省很多代码,并且可以合并很多冗余代码,为了最大化的精简代码想到了通过泛型的type用反射的方式实例化对象,这样对象 ...

  3. Java虚拟机学习(7):对象内存分配与回收

    对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...

  4. Java虚拟机学习(6):对象访问

    对象访问会涉及到Java栈.Java堆.方法区这三个内存区域. 如下面这句代码: 1 Object objectRef = new Object(); 假设这句代码出现在方法体中,"Obje ...

  5. java虚拟机如何判断两个类相同_你有没有想过: Java 虚拟机是如何判断两个对象是否相同的?判断的流程是什么?...

    在Java程序运行时,会产生那么多的对象,那 Java 虚拟机是如何判断两个对象是否相同的呢?判断的流程是什么? 参考解答: Java 虚拟机会先判断两个对象的hashCode是否相同,如果hashC ...

  6. Java工具类--Map集合与Java对象相互转换

    import org.springframework.cglib.beans.BeanMap;import java.util.HashMap; import java.util.Map;public ...

  7. java创建一个人函数类_Java对象和类–学习如何创建和实现

    对象和类被认为是任何基于OOPs的语言的精华.由于Java是最常用的面向对象编程语言之一,因此非常有必要牢记这些概念.因此,我为您带来这篇文章,在这里我将给您一个完整的Java对 对象和类被认为是任何 ...

  8. 在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象

    在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象   我们知道,在 Java 中,创建一个内部类对象之前,需要它的一个外部类对象.这是因为内部类可能使用外部类的数据.   在内部类中 ...

  9. Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象

    本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...

最新文章

  1. 水声定位中的CBF波束形成原理
  2. 关于ST02看到SWAP红色的讨论
  3. python相同程序执行结果不同_原理相同只是精简了的python代码,运行结果不同是为什么...
  4. php OpenSSL 加解密
  5. 电子科大计算机考研考英语几,11年电子科大计算机考研经验_跨考网
  6. Android Studio Flutter 调试技巧 Flutter Inspector 提升你的维护开发效率 轻松定位复杂嵌套Widget代码位置
  7. mysql的建表语句
  8. String StringBuilder StringBuffer
  9. [GO]并发实现聊天室服务器
  10. Linux命令:修改文件权限命令chmod、chgrp、chown详解
  11. win10电脑桌面透明便签_win10系统在桌面添加透明便签的图文技巧
  12. jQuery+PHP+Mysql在线拍照和在线浏览照片
  13. 元界未来获得种子轮投资,新址入驻深圳南山核心区大冲国际中心
  14. unity粒子编辑器详解
  15. Word入门教程之插入文字批注(转)
  16. Cylons工业机器人_机器人的是什么意思
  17. java long类型溢出误区
  18. 滑动验证码破解—python—以某东网站为例
  19. java基础扫盲_Java学习:扫盲
  20. apk开发教程!安卓资深架构师分享学习经验及总结,技术详细介绍

热门文章

  1. re-for-50-plz-50 寒假逆向生涯(6/100)
  2. WriteFile和GetSystemDirectory
  3. 如何做好应急响应工作?常见应急响应流程
  4. 160个Crackme019
  5. android 使用NDK
  6. ACM入门之【约数】
  7. docker之网络访问
  8. 分治法求解最大子数组问题
  9. CSS选择器的声明与嵌套
  10. python浮点数占多少字节_Python的浮点数损失精度问题