OSCache缓存技术(4)

第三部分: Demo

一、对象缓存

1 Cache 操作类

Java代码 复制代码
  1. import java.util.Date;   
  2.   
  3. import com.opensymphony.oscache.base.NeedsRefreshException;   
  4.   
  5. import com.opensymphony.oscache.general.GeneralCacheAdministrator;   
  6.   
  7. public class BaseCache extends GeneralCacheAdministrator {       
  8.   
  9.     private int refreshPeriod; //过期时间(单位为秒);           
  10.   
  11.     private String keyPrefix; //关键字前缀字符;               
  12.   
  13.     private static final long serialVersionUID = -4397192926052141162L;          
  14.   
  15.     public BaseCache(String keyPrefix,int refreshPeriod){      
  16.   
  17.         super();      
  18.   
  19.         this.keyPrefix = keyPrefix;      
  20.   
  21.         this.refreshPeriod = refreshPeriod;      
  22.   
  23.     }      
  24.   
  25.     //添加被缓存的对象;      
  26.   
  27.     public void put(String key,Object value){      
  28.   
  29.         this.putInCache(this.keyPrefix+"_"+key,value);      
  30.   
  31.     }      
  32.   
  33.     //删除被缓存的对象;      
  34.   
  35.     public void remove(String key){      
  36.   
  37.         this.flushEntry(this.keyPrefix+"_"+key);      
  38.   
  39.     }      
  40.   
  41.     //删除所有被缓存的对象;      
  42.   
  43.     public void removeAll(Date date){      
  44.   
  45.         this.flushAll(date);      
  46.   
  47.     }             
  48.   
  49.     public void removeAll(){      
  50.   
  51.         this.flushAll();      
  52.   
  53.     }      
  54.   
  55.     //获取被缓存的对象;      
  56.   
  57.     public Object get(String key) throws Exception{      
  58.   
  59.         try{      
  60.   
  61.             return this.getFromCache(this.keyPrefix+"_"+key,this.refreshPeriod);      
  62.   
  63.         } catch (NeedsRefreshException e) {      
  64.   
  65.             this.cancelUpdate(this.keyPrefix+"_"+key);      
  66.   
  67.             throw e;      
  68.   
  69.         }        
  70.   
  71.     }              
  72.   
  73. }     
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 管理类

 

Java代码 复制代码
  1. public class CacheManager {          
  2.   
  3.     private BaseCache newsCache;              
  4.   
  5.     private static CacheManager instance;      
  6.   
  7.     private static Object lock = new Object();             
  8.   
  9.     private CacheManager() {      
  10.   
  11.         //这个根据配置文件来,初始BaseCache而已;      
  12.   
  13.         newsCache = new BaseCache("news",120);           
  14.   
  15.     }              
  16.   
  17.     public static CacheManager getInstance(){      
  18.   
  19.         if (instance == null){      
  20.   
  21.             synchronized( lock ){      
  22.   
  23.                 if (instance == null){      
  24.   
  25.                     instance = new CacheManager();      
  26.   
  27.                 }      
  28.   
  29.             }      
  30.   
  31.         }      
  32.   
  33.         return instance;      
  34.   
  35.     }         
  36.   
  37.     public void putUser(User news) { newsCache.put(news.getId()+"",news);      }         
  38.   
  39.     public void removeUser(String newsID) {  newsCache.remove(newsID);       }         
  40.   
  41.     public User getUser(int newsID) {      
  42.   
  43.         try {      
  44.   
  45.             return (User) newsCache.get(newsID+"");      
  46.   
  47.         } catch (Exception e) {      
  48.   
  49.             System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());      
  50.   
  51.             User news = new User(newsID);      
  52.   
  53.             this.putUser(news);      
  54.   
  55.             return news;      
  56.   
  57.         }      
  58.   
  59.     }         
  60.   
  61.     public void removeAllNews() {      
  62.   
  63.         newsCache.removeAll();      
  64.   
  65.     }         
  66.   
  67. }  
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

 

Java代码 复制代码
  1. public class User {   
  2.   
  3.     private int id;   
  4.   
  5.     private String name;   
  6.   
  7.     private String sex;   
  8.   
  9.     private int age;   
  10.   
  11.     private Date accessTime; public User(int id) {   
  12.   
  13.        super();   
  14.   
  15.        this.id = id;   
  16.   
  17.        this.accessTime = new Date(System.currentTimeMillis());   
  18.   
  19.     }   
  20.   
  21.     public String toString() {   
  22.   
  23.        return "User info is : id=" + id + "  accessTime="  
  24.   
  25.               + accessTime.toString();   
  26.   
  27.     }   
  28.   
  29.     public User(String name, String sex, int age) {   
  30.   
  31.        super();   
  32.   
  33.        this.name = name;   
  34.   
  35.        this.sex = sex;   
  36.   
  37.        this.age = age;   
  38.   
  39.     }   
  40.   
  41.     public User() {   
  42.   
  43.     }   
  44.   
  45.     public int getAge() {   
  46.   
  47.        return age;   
  48.   
  49.     }   
  50.   
  51.     public void setAge(int age) {   
  52.   
  53.        this.age = age;   
  54.   
  55.     }   
  56.   
  57.     public String getName() {   
  58.   
  59.        return name;   
  60.   
  61.     }   
  62.   
  63.     public void setName(String name) {   
  64.   
  65.        this.name = name;   
  66.   
  67.     }   
  68.   
  69.     public String getSex() {   
  70.   
  71.        return sex;   
  72.   
  73.     }   
  74.   
  75.     public void setSex(String sex) {   
  76.   
  77.        this.sex = sex;   
  78.   
  79.     }   
  80.   
  81.     public int getId() {   
  82.   
  83.        return id;   
  84.   
  85.     }   
  86.   
  87.     public void setId(int id) {   
  88.   
  89.        this.id = id;   
  90.   
  91.     }   
  92.   
  93.     public Date getAccessTime() {   
  94.   
  95.        return accessTime;   
  96.   
  97.     }   
  98.   
  99.     public void setAccessTime(Date accessTime) {   
  100.   
  101.        this.accessTime = accessTime;   
  102.   
  103.     }   
  104.   
  105. }  
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 、测试类

 

Java代码 复制代码
  1. public class TestObjectCache {   
  2.   
  3.     public static void main(String[] args) {   
  4.   
  5.        CacheManager cm=CacheManager.getInstance();   
  6.   
  7.          
  8.   
  9.        TestObjectCache test=new TestObjectCache();   
  10.   
  11.        test.print(cm);   
  12.   
  13.     }   
  14.   
  15.       
  16.   
  17.     public void print(CacheManager cm){   
  18.   
  19.        User user=null;   
  20.   
  21.        for (int i = 0; i < 1000; i++) {   
  22.   
  23.            user=cm.getUser(100);   
  24.   
  25.            System.out.println("<<"+i+">>: "+user);            
  26.   
  27.            if(i==10){   
  28.   
  29.               //删除缓存id的对象   
  30.   
  31.               cm.removeUser(100+"");   
  32.   
  33.            }            
  34.   
  35.            if(i==20){   
  36.   
  37.               //删除所有缓存的对象   
  38.   
  39.               cm.removeAllNews();   
  40.   
  41.            }            
  42.   
  43.            // 睡眠部分   
  44.   
  45.            try {   
  46.   
  47.               Thread.sleep(30000);   
  48.   
  49.            } catch (Exception e) {   
  50.   
  51.            }   
  52.   
  53.        }   
  54.   
  55.     }   
  56.   
  57. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值