oscacheオブジェクトキャッシュ回転



 、 
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{   
            returnthis.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) {
           }
       }
    }
}