1、OSCache是什么?
     
OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个
一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。
2、OSCache的特点
    (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
    (2) 拥有全面的API:OSCache API允许你通过编程的方式来控制所有的OSCache特性。 
    (3) 永久缓存:缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。 
    (4) 支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。
    (5) 缓存过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)。
3、OSCache的安装与配置
    网上已经有一个不错的使用教程:http://blog.csdn.net/ezerg/archive/2004/10/14/135769.aspx 
4、有关“用OSCache进行缓存对象”的研究
    这个是我今天要说的东西。网上对于OSCache缓存Web页面很多说明和例子,但对于缓存对象方面说得不多,我就把自已写得一些东西放出来,让大家看一看是怎样缓存对象的!
    我基于GeneralCacheAdministrator类来写的BaseCache类
    
		
				
				
						- 
								
										package
										 com.klstudio.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;   
						
- 
								        }   
						
- 
								  
						
- 
								    }   
						
- 
								       
						
- 
								}   
						
- 
								  
						
- 
								  
						
 
		
				
				
						- 
								
										package
										 com.klstudio.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;  
						
- 
								        }  
						
- 
								  
						
- 
								    }  
						
- 
								      
						
- 
								}  
						
 
		
		   通过CacheManager类来看怎样缓存对象的,这个类中所用的News只是具体功能的类,我就不贴出来了,你可以自己写一个!    
- package com.klstudio;   
-   
- import com.klstudio.News;   
- import com.klstudio.cache.BaseCache;   
-   
- public class CacheManager {   
-        
-     private BaseCache newsCache;   
-   
-        
-     private static CacheManager instance;   
-     private static Object lock = new Object();   
-        
-     public CacheManager() {   
-           
-         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) {   
-           
-         newsCache.put(news.getID(),news);   
-     }   
-   
-     public void removeNews(String newsID) {   
-           
-         newsCache.remove(newsID);   
-     }   
-   
-     public News getNews(String newsID) {   
-           
-         try {   
-             return (News) newsCache.get(newsID);   
-         } catch (Exception e) {   
-               
-             System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());   
-             News news = new News(newsID);   
-             this.putNews(news);   
-             return news;   
-         }   
-     }   
-   
-     public void removeAllNews() {   
-           
-         newsCache.removeAll();   
-     }   
-   
- }   
-   
- package com.klstudio;  
-   
- import com.klstudio.News;  
- import com.klstudio.cache.BaseCache;  
-   
- public class CacheManager {  
-       
-     private BaseCache newsCache;  
-   
-       
-     private static CacheManager instance;  
-     private static Object lock = new Object();  
-       
-     public CacheManager() {  
-           
-         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) {  
-           
-         newsCache.put(news.getID(),news);  
-     }  
-   
-     public void removeNews(String newsID) {  
-           
-         newsCache.remove(newsID);  
-     }  
-   
-     public News getNews(String newsID) {  
-           
-         try {  
-             return (News) newsCache.get(newsID);  
-         } catch (Exception e) {  
-               
-             System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());  
-             News news = new News(newsID);  
-             this.putNews(news);  
-             return news;  
-         }  
-     }  
-   
-     public void removeAllNews() {  
-           
-         newsCache.removeAll();  
-     }  
-   
- }