Cache是一种提高系统的响应速度,改善系统的运行性能的技术.OSCache是OpenSymphony组织提供的一个J2EE架构中Web应用层的缓存技术实现组件.
主要特点
1.可选的缓存区,可以将内存,硬盘或者同时使用内存和硬盘作为缓存区.
2.多种缓存级别,包括页面部分内容或者页面级内容.
3.容错功能,当web应用和数据库之间无法进行交互时,可以使用缓存,为用户提供数据.
1:oscache文件下载
http://www.opensymphony.com/oscache/download.html,目前版本为2.4.1。可以下载 oscache-2.4.1-full文件。里面包含example。
2:解压压缩包,找到oscache.jar.放入工程。
3:基础操作工具类
import java.util.Date;
import com.opensymphony.oscache.base.CacheEntry;
import com.opensymphony.oscache.base.EntryRefreshPolicy;
import com.opensymphony.oscache.base.NeedsRefreshException;
import com.opensymphony.oscache.general.GeneralCacheAdministrator;
/**
* @author liuyb
*/
public class BaseCache extends GeneralCacheAdministrator {
// 过期时间(单位为秒);
private int refreshPeriod;
// 关键字前缀字符;
private String keyPrefix;
private static final long serialVersionUID = -4397192926052141162L;
public BaseCache(String keyPrefix, int refreshPeriod) {
super();
this.keyPrefix = keyPrefix;
this.refreshPeriod = refreshPeriod;
}
/**
* 添加被缓存的对象;
*/
public void put(String key, Object value) {
this.putInCache(this.keyPrefix + "_" + key, value);
}
/**
* 删除被缓存的对象;
*/
public void remove(String key) {
this.flushEntry(this.keyPrefix + "_" + key);
}
/**
* 删除所有被缓存的对象;
*/
public void removeAll(Date date) {
this.flushAll(date);
}
public void removeAll() {
this.flushAll();
}
/**
* 获取被缓存的对象;
*/
public Object get(String key) throws Exception {
try {
return this.getFromCache(this.keyPrefix + "_" + key,
this.refreshPeriod);
} catch (NeedsRefreshException e) {
this.cancelUpdate(this.keyPrefix + "_" + key);
throw e;
}
}
/**
*
* @param key
* @param refreshPeriod
* @return 被缓存的对象
* @throws Exception
*/
public Object get(String key, int refreshPeriod) throws Exception {
try {
return this.getFromCache(this.keyPrefix + "_" + key, refreshPeriod);
} catch (NeedsRefreshException e) {
this.cancelUpdate(this.keyPrefix + "_" + key);
throw e;
}
}
}
4:操作使用
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.opensymphony.oscache.base.NeedsRefreshException;
@Component
public class PersonCompanyModiCached {
@Autowired
private PersonCompanyModiSrv personCompanyModiSrv;
private static Logger logger = Logger.getLogger(PersonCompanyModiCached.class);
private static String PERSON_COMPANY_MODI_CACHE = "personCompanyModiCache";
private static Long indexSysID = 5L;
static class PersonCompanyModiCache {
private static BaseCache personCompanyModiCached = null;
public static BaseCache getInstance() {
if (personCompanyModiCached == null) {
personCompanyModiCached = new BaseCache(PERSON_COMPANY_MODI_CACHE, 3600);//秒为单位的
}
return personCompanyModiCached;
}
}
public static void cleanCache() {
logger.debug("CleanpersonCompanyModiCacheJob...");
PersonCompanyModiCache.getInstance().removeAll();
}
}
PersonCompanyModiCache.getInstance().put(wpId, "1");