论坛首页 Java企业应用论坛

Cache技术――OSCache(四)

浏览 2360 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-10-26  

第三部分: 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) {

           }

       }

    }

}
 

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics