java oscache 使用_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
CacheFilter
com.opensymphony.oscache.web.filter.CacheFilter
time
600
scope
session
java oscache 使用_OScache的使用(Java对象)相关推荐
- java oscache 缓存_Java]用OSCache进行缓存对象
Java]用OSCache进行缓存对象 1.OSCache是什么? OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能.OSC ...
- Java通过泛型的模板类型实例化对象
Java通过泛型的模板类型实例化对象 最近自己研究了下mvvm框架,使用泛型的方式可节省很多代码,并且可以合并很多冗余代码,为了最大化的精简代码想到了通过泛型的type用反射的方式实例化对象,这样对象 ...
- Java虚拟机学习(7):对象内存分配与回收
对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...
- Java虚拟机学习(6):对象访问
对象访问会涉及到Java栈.Java堆.方法区这三个内存区域. 如下面这句代码: 1 Object objectRef = new Object(); 假设这句代码出现在方法体中,"Obje ...
- java虚拟机如何判断两个类相同_你有没有想过: Java 虚拟机是如何判断两个对象是否相同的?判断的流程是什么?...
在Java程序运行时,会产生那么多的对象,那 Java 虚拟机是如何判断两个对象是否相同的呢?判断的流程是什么? 参考解答: Java 虚拟机会先判断两个对象的hashCode是否相同,如果hashC ...
- Java工具类--Map集合与Java对象相互转换
import org.springframework.cglib.beans.BeanMap;import java.util.HashMap; import java.util.Map;public ...
- java创建一个人函数类_Java对象和类–学习如何创建和实现
对象和类被认为是任何基于OOPs的语言的精华.由于Java是最常用的面向对象编程语言之一,因此非常有必要牢记这些概念.因此,我为您带来这篇文章,在这里我将给您一个完整的Java对 对象和类被认为是任何 ...
- 在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象
在 Java 中,为什么需要创建内部类对象之前需要先创建外部类对象 我们知道,在 Java 中,创建一个内部类对象之前,需要它的一个外部类对象.这是因为内部类可能使用外部类的数据. 在内部类中 ...
- Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象
本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...
最新文章
- 水声定位中的CBF波束形成原理
- 关于ST02看到SWAP红色的讨论
- python相同程序执行结果不同_原理相同只是精简了的python代码,运行结果不同是为什么...
- php OpenSSL 加解密
- 电子科大计算机考研考英语几,11年电子科大计算机考研经验_跨考网
- Android Studio Flutter 调试技巧 Flutter Inspector 提升你的维护开发效率 轻松定位复杂嵌套Widget代码位置
- mysql的建表语句
- String StringBuilder StringBuffer
- [GO]并发实现聊天室服务器
- Linux命令:修改文件权限命令chmod、chgrp、chown详解
- win10电脑桌面透明便签_win10系统在桌面添加透明便签的图文技巧
- jQuery+PHP+Mysql在线拍照和在线浏览照片
- 元界未来获得种子轮投资,新址入驻深圳南山核心区大冲国际中心
- unity粒子编辑器详解
- Word入门教程之插入文字批注(转)
- Cylons工业机器人_机器人的是什么意思
- java long类型溢出误区
- 滑动验证码破解—python—以某东网站为例
- java基础扫盲_Java学习:扫盲
- apk开发教程!安卓资深架构师分享学习经验及总结,技术详细介绍