OSCache入门系列(四)

2010年5月29日 由 yybean 留言 »

tip:如果要查看这一系列文章,可点击 这里

 

第三部分:Demo

一、对象缓存

1、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;

}

}

}

2、Cache管理类

public class CacheManager {
 
private BaseCache newsCache;
 
private static CacheManager instance;
 
private static Object lock = new Object();
 
private CacheManager() {
 
//这个根据配置文件来,初始BaseCache而已;
 
newsCache = new BaseCache("news",120);
 
}
 
public static CacheManager getInstance(){
 
if (instance == null){
 
synchronized( lock ){
 
if (instance == null){
 
instance = new CacheManager();
 
}
 
}
 
}
 
return instance;
 
}
 
public void putUser(User news) { newsCache.put(news.getId()+"",news); }
 
public void removeUser(String newsID) { newsCache.remove(newsID); }
 
public User getUser(int newsID) {
 
try {
 
return (User) newsCache.get(newsID+"");
 
} catch (Exception e) {
 
System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());
 
User news = new User(newsID);
 
this.putUser(news);
 
return news;
 
}
 
}
 
public void removeAllNews() {
 
newsCache.removeAll();
 
}
 
}

3、对象Bean

public class User {
 
private int id;
 
private String name;
 
private String sex;
 
private int age;
 
private Date accessTime; public User(int id) {
 
super();
 
this.id = id;
 
this.accessTime = new Date(System.currentTimeMillis());
 
}
 
public String toString() {
 
return "User info is : id=" + id + " accessTime="
 
+ accessTime.toString();
 
}
 
public User(String name, String sex, int age) {
 
super();
 
this.name = name;
 
this.sex = sex;
 
this.age = age;
 
}
 
public User() {
 
}
 
public int getAge() {
 
return age;
 
}
 
public void setAge(int age) {
 
this.age = age;
 
}
 
public String getName() {
 
return name;
 
}
 
public void setName(String name) {
 
this.name = name;
 
}
 
public String getSex() {
 
return sex;
 
}
 
public void setSex(String sex) {
 
this.sex = sex;
 
}
 
public int getId() {
 
return id;
 
}
 
public void setId(int id) {
 
this.id = id;
 
}
 
public Date getAccessTime() {
 
return accessTime;
 
}
 
public void setAccessTime(Date accessTime) {
 
this.accessTime = accessTime;
 
}
 
}

4、测试类

public class TestObjectCache {
 
public static void main(String[] args) {
 
CacheManager cm=CacheManager.getInstance();
 
TestObjectCache test=new TestObjectCache();
 
test.print(cm);
 
}
 
public void print(CacheManager cm){
 
User user=null;
 
for (int i = 0; i < 1000; i++) {
 
user=cm.getUser(100);
 
System.out.println("<<"+i+">>: "+user);
 
if(i==10){
 
//删除缓存id的对象
 
cm.removeUser(100+"");
 
}
 
if(i==20){
 
//删除所有缓存的对象
 
cm.removeAllNews();
 
}
 
// 睡眠部分
 
try {
 
Thread.sleep(30000);
 
} catch (Exception e) {
 
}
 
}
 
}
 
}




发表评论