使用缓存技术来提高性能之——OSCache缓存技术入门(一)

OSCache 的应用:

1.缓存对象将一个对象以key-value的形式放入缓存中

    putInCache(String key,Object content);

    getFromCache(String key);

    removeEntry(String key);

    主要通过GeneralCacheAdministrator类来实现。

2.对局部页面进行缓存

    详见:OSCache 学习笔记(2)_缓存局部页面

3.对整个页面进行缓存

    用CacheFilter实现页面级缓存,可缓存单个文件、缓存URL pattern和自己设定缓存属性的缓存。

     详见:OSCache 学习笔记(2)__缓存整个页面

项目中集成OSCache

1.下载OSCache  http://java.net/downloads/oscache/,下载后解压。

解压后,文件如下图:

          使用缓存技术来提高性能之——OSCache缓存技术入门(一)_第1张图片

2.新建立一个web应用 

3.将OSCache集成到该web项目当中

    (1)从解压缩目录取得oscache.jar 文件放到 /WEB-INF/lib 下。

    (2)将etc目录下的oscache.properties、oscache.tld放在src目录下(编译的时候会自动生成在WEB-INF/class目录)。

    (3)修改oscache.properties中参数信息。

        将cache.memory设置为true,cache.memory=true

    (4)修改web.xml中的信息。

<taglib>  
<taglib-uri>oscache</taglib-uri>  
<taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>  
</taglib>

完成上面四步,基本上完成了WEB项目中OSCache环境的搭建。

应用一:在项目中用OSCache 缓存对象   

    1.封装GeneralCacheAdministrator(根据需求,也可以不封装,当缓存类的一个成员来使用,就像Map一样)

BaseCache类: 

public class BaseCache extends GeneralCacheAdministrator {     

	private static final long serialVersionUID = -4397192926052141162L;
	private String keyPrefix; //关键字前缀字符,区别属于哪个模块
	private int refreshPeriod; //过期时间(单位为秒);         

    public BaseCache(String keyPrefix,int refreshPeriod){    
        super();    
        this.keyPrefix = keyPrefix;    
        this.refreshPeriod = refreshPeriod;    

    }    

    /**
     *     
     * put(添加被缓存的对象)
     * @param key
     * @param value 
     * @return void
     * @createDate 2013-1-31 下午04:16:46
     * @since  1.0.0
     */
    public void put(String key,Object value){    
        this.putInCache(this.keyPrefix+"_"+key,value);    
    }    

    /**
     * remove(删除被缓存的对象)
     * @param key 
     * @return void
     * @createDate 2013-1-31 下午04:17:06
     * @since  1.0.0
     */
    public void remove(String key){    
        this.flushEntry(this.keyPrefix+"_"+key);    
    }    

    /**
     * removeAll(删除指定日期所有被缓存的对象)
     * @param date 
     * @return void
     * @createDate 2013-1-31 下午04:17:29
     * @since  1.0.0
     */
    public void removeAll(Date date){    
        this.flushAll(date);    
    }           

    /**
     * removeAll(删除所有被缓存的对象) 
     * @return void
     * @createDate 2013-1-31 下午04:18:01
     * @since  1.0.0
     */
    public void removeAll(){    
        this.flushAll();    
    }    

    /**
     * get(获取被缓存的对象)
     * @param key
     * @return
     * @throws Exception 
     * @return Object
     * @createDate 2013-1-31 下午04:18:45
     * @since  1.0.0
     */
    public Object get(String key) throws Exception{    
        try{    
            return this.getFromCache(this.keyPrefix+"_"+key,this.refreshPeriod);    
        } catch (NeedsRefreshException e) {    
            this.cancelUpdate(this.keyPrefix+"_"+key);    
            e.printStackTrace();
            throw e;
        }      
    }            
}   

2.定义自己的业务类以及业务实现类

     UserCacheService.java  

public interface UserCacheService {
	/**
	 * 前缀,用来区别于各个模块的缓存
	 */
	public String KEY_PREFIX="_user";
	
	/**
	 *缓存刷新的时间 
	 */
	public int REFRESH_PERIOD=3600;
	
	/**
	 * putInCache(添加用户信息到缓存中)
	 * @param userId
	 * @param user 
	 * @return void
	 * @createDate 2013-1-31 下午04:40:31
	 * @since  1.0.0
	 */
	public void putInCache(String userId,User user);
	
	/**
	 * removeFromCache(在缓存中删除该用户信息)
	 * @param userId 
	 * @return void
	 * @createDate 2013-1-31 下午04:40:58
	 * @since  1.0.0
	 */
	public void removeFromCache(String userId);
	
	/**
	 * removeAll(删除该模块的所有缓存) 
	 * @return void
	 * @createDate 2013-1-31 下午04:47:09
	 * @since  1.0.0
	 */
	public void removeAll();
	
	/**
	 * 
	 * getFromCache(根据用户ID获取缓存中的信息)
	 * @param userId 
	 * @return void
	 * @createDate 2013-1-31 下午04:41:30
	 * @since  1.0.0
	 */
	public User getFromCache(String userId);
}

UserCacheServiceImpl.java
public class UserCacheServiceImpl implements UserCacheService{
	private BaseCache cache=new BaseCache(KEY_PREFIX, REFRESH_PERIOD);
	
	@Override
	public void putInCache(String userId, User user) {
		cache.put(userId, user);
	}
	
	@Override
	public void removeFromCache(String userId) {
		cache.remove(userId);
	}
	
	@Override
	public void removeAll() {
		cache.removeAll();
	}
	
	@Override
	public User getFromCache(String userId) {
		User user=null;
		try {
			user= (User)cache.get(userId);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return user;
	}
}

核心Cache 管理类 GeneralCacheAdministrator的常用方法

1.void putInCache(String key,Object content);//put on Object in a cache
  
2.Object getFromCache(String key);//  get on Object from the Cache

3.void removeEntry(String key);//  remove an Object in a cache

4.void flushEntry(String key);//  flushes a single cache entry

5.void flushAll();//  flush the entire cache immediately

6.void cancelUpdate(String key);//  cacels a pending cache update


参考文章:

1.用OSCache进行缓存对象    http://blog.csdn.net/zhifeng172/article/details/7608682

2.Cache技术――OSCache    http://shijincheng0223.iteye.com/blog/1412128


你可能感兴趣的:(使用缓存技术来提高性能之——OSCache缓存技术入门(一))