Java]用OSCache进行缓存对象

1、OSCache是什么?

OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个

一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。

2、OSCache的特点

(1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。

(2) 拥有全面的API:OSCache API允许你通过编程的方式来控制所有的OSCache特性。

(3) 永久缓存:缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。

(4) 支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。

(5) 缓存过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)。

3、OSCache的安装与配置

网上已经有一个不错的使用教程:http://blog.csdn.net/ezerg/archive/2004/10/14/135769.aspx

4、有关“用OSCache进行缓存对象”的研究

这个是我今天要说的东西。网上对于OSCache缓存Web页面很多说明和例子,但对于缓存对象方面说得不多,我就把自已写得一些东西放出来,让大家看一看是怎样缓存对象的!

我基于GeneralCacheAdministrator类来写的BaseCache类

package com.klstudio.cache;

import java.util.Date;

import com.opensymphony.oscache.base.NeedsRefreshException;

import com.opensymphony.oscache.general.GeneralCacheAdministrator;

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;

}

}

}

package com.klstudio.cache;

import java.util.Date;

import com.opensymphony.oscache.base.NeedsRefreshException;

import com.opensymphony.oscache.general.GeneralCacheAdministrator;

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;

}

}

}

通过CacheManager类来看怎样缓存对象的,这个类中所用的News只是具体功能的类,我就不贴出来了,你可以自己写一个!

package com.klstudio;

import com.klstudio.News;

import com.klstudio.cache.BaseCache;

public class CacheManager {

private BaseCache newsCache;

private static CacheManager instance;

private static Object lock = new Object();

public CacheManager() {

//这个根据配置文件来,初始BaseCache而已;

newsCache = new BaseCache("news",1800);

}

public static CacheManager getInstance(){

if (instance == null){

synchronized( lock ){

if (instance == null){

instance = new CacheManager();

}

}

}

return instance;

}

public void putNews(News news) {

// TODO 自动生成方法存根

newsCache.put(news.getID(),news);

}

public void removeNews(String newsID) {

// TODO 自动生成方法存根

newsCache.remove(newsID);

}

public News getNews(String newsID) {

// TODO 自动生成方法存根

try {

return (News) newsCache.get(newsID);

} catch (Exception e) {

// TODO 自动生成 catch 块

System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());

News news = new News(newsID);

this.putNews(news);

return news;

}

}

public void removeAllNews() {

// TODO 自动生成方法存根

newsCache.removeAll();

}

}

package com.klstudio;

import com.klstudio.News;

import com.klstudio.cache.BaseCache;

public class CacheManager {

private BaseCache newsCache;

private static CacheManager instance;

private static Object lock = new Object();

public CacheManager() {

//这个根据配置文件来,初始BaseCache而已;

newsCache = new BaseCache("news",1800);

}

public static CacheManager getInstance(){

if (instance == null){

synchronized( lock ){

if (instance == null){

instance = new CacheManager();

}

}

}

return instance;

}

public void putNews(News news) {

// TODO 自动生成方法存根

newsCache.put(news.getID(),news);

}

public void removeNews(String newsID) {

// TODO 自动生成方法存根

newsCache.remove(newsID);

}

public News getNews(String newsID) {

// TODO 自动生成方法存根

try {

return (News) newsCache.get(newsID);

} catch (Exception e) {

// TODO 自动生成 catch 块

System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());

News news = new News(newsID);

this.putNews(news);

return news;

}

}

public void removeAllNews() {

// TODO 自动生成方法存根

newsCache.removeAll();

}

}

java oscache 缓存_Java]用OSCache进行缓存对象相关推荐

  1. java实现lru缓存_Java中的LRU缓存实现

    java实现lru缓存 什么是LRU缓存? (What is LRU Cache?) LRU Cache stands for Least Recently Used Cache. The size ...

  2. java图片序列化_Java中的强大武器——对象的序列化

    原标题:Java中的强大武器--对象的序列化 所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象.这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象, ...

  3. java 自动过期缓存_Java自动过期本地缓存简单实现

    实际项目中常常需要用到本地缓存,特别是一些固定不变的数据,不想频繁调接口,因为http请求本身需要耗时,下面几个类对本地缓存作了简单实现,支持自动过期功能 LocalCache.javainterfa ...

  4. Java颜色互换_java – 如何慢慢地将对象颜色从一个变为...

    下面是一个示例,当您从一个组件移动到另一个组件时,它会淡化背景: import java.awt.*; import java.awt.event.*; import java.util.Hashta ...

  5. java技术难点_Java核心技术第四章----对象与类重难点总结

    一.类之间的关系 类和类之间的关系,耦合度从高到低: is -a.继承.实现 has-a.组合.聚合.关联 user-a.依赖. 要求是:高内聚.低耦合. 继承("is-a") 继 ...

  6. java反射基础_Java反射基础(一)--Class对象获取

    ClassesJava中,任何一个对象要么是一个引用类型要么是基本数据类型.引用类型指的是那些直接或间接 Java.lang.Object的类.Classse,enum,和接口都是应用类型.基本类型是 ...

  7. java foreach参数_java – Mybatis foreach迭代复杂对象参数中的整数列表

    我在Play Framework 2.3.6 Java项目中使用MyBatis 3.2.8.我已经挣扎了几天,迭代遍历复杂对象参数中的MyBatis映射器的整数列表.这是我的设置: 我在EventFi ...

  8. java反射 配置文件_Java反射——根据配置文件,实例化对象

    案例:根据配置文件,实例化对象 src下创建一个"配置文件"config.txt,内容如下: className=ahjava.p07reflect.Cat package ahj ...

  9. java新建测试程序_java – 如何创建一个CloseableHttpResponse对象来帮助测试?

    我正在尝试构建一个 CloseableHttpResponse模拟对象,以在我的单元测试中返回,但是没有构造函数.我发现这个 DefaultHttpResponseFactory,但它只是一个Http ...

最新文章

  1. 计算机网络导论 ppt,【2017年整理】1计算机网络导论.ppt
  2. (转)javascript关于运动的各种问题经典总结
  3. Xilinx axi dma driver 驱动构建 (二)
  4. SSH连接原理及ssh-key讲解
  5. 数字信号处理学习笔记(二)|快速傅里叶变换
  6. VTK:Points之ExtractSurface
  7. python(3)-动态参数实现字符串格式化
  8. 星期三,今天早上上了四节JS课程,下午听健康讲座,晚上装系统
  9. SuperSocket与Netty之实现protobuf协议,包括服务端和客户端
  10. SpringSecurity安全框架
  11. H3C 路由器的IPSEC ××× 配置
  12. wpf esc key 检测不到_爬虫笔记之requests检测网站编码方式(zozo.jp)(碎碎念) - CC11001100...
  13. 强悍的 Linux —— linux 中 bin 和 sbin 目录的主要区别
  14. 2016年最值得学习的五大开源项目
  15. C++ 整型长度的获取 不同的系统
  16. 学习jquery.pagewalkthroung.js插件记录点
  17. php京东接口开发,技术文档
  18. 网络工程师 第1章 计算机网络概述
  19. Python数据可视化:5段代码搞定散点图绘制与使用,值得收藏
  20. unity简单技能系统

热门文章

  1. 假设以带头结点的循环链表表示队列_数据结构·链表(C实现)
  2. dubbo provider异步_Dubbo相关面试题
  3. android canvas_Android 自定义View篇(七)实现环形进度条效果
  4. 按需要生成你的网站导航栏
  5. vue-cli构建的项目手动添加eslint配置
  6. 为什么要在网站上主动放置沃通全球可信网站认证标志
  7. 3G手机Android应用开发视频教程_黎活明老师的视频(第三天课程)总共有八天课程...
  8. pku2182: Lost Cows
  9. 基于界面自动化测试框架的发展
  10. 贪心——跳跃游戏 II(Leetcode 45)