OSCache简单例子

OSCache简单例子

1. BaseCache.java 基类

package com.yanek.demo.cache.oscache;

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;
}

}

}

2. CacheManager.java 管理器

package com.yanek.demo.cache.oscache;

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);

News news = new News(newsID,"aaa","bbb");
this.putNews(news);
return news;
}
}

public void removeAllNews() {
// TODO 自动生成方法存根
newsCache.removeAll();
}

}

3. News.java 缓存的对象

package com.yanek.demo.cache.oscache;

public class News {

private String id;

private String title;

private String content;


public News(String id, String title, String content) {
super();
this.id = id;
this.title = title;
this.content = content;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

}

4. TestCache.java 测试

package com.yanek.demo.cache.oscache;

public class TestCache {

/**
* @param args
*/
public static void main(String[] args) {


CacheManager cm=CacheManager.getInstance();
News n1=new News("1","111","111");
cm.putNews(n1);
News n1_c=cm.getNews("1");
System.out.println("c1:"+n1_c.getContent());

News n2=new News("1","111","222");
cm.putNews(n2);
System.out.println("c1:"+cm.getNews("1").getContent());

cm.removeNews("1");

System.out.println("c1:"+cm.getNews("1").getContent());

BaseCache countCache = new BaseCache("count",1800);

countCache.put("1100454", 10);
countCache.put("1100455", 11);
countCache.put("1100456", 3);

try {
Integer cachedCount = (Integer)countCache.get("1100454");

System.out.println("cachedCount:"+cachedCount);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}




}

}

你可能感兴趣的:(OScache)