1.缓存对象(将一个对象以key-value的形式放入缓存中)
putInCache(String key,Object content);
getFromCache(String key);
removeEntry(String key);
主要通过GeneralCacheAdministrator类来实现。
2.对局部页面进行缓存
详见:OSCache 学习笔记(2)_缓存局部页面
3.对整个页面进行缓存
用CacheFilter实现页面级缓存,可缓存单个文件、缓存URL pattern和自己设定缓存属性的缓存。
详见:OSCache 学习笔记(2)__缓存整个页面
1.下载OSCache http://java.net/downloads/oscache/,下载后解压。
解压后,文件如下图:
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环境的搭建。
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; } } }
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); }
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参考文章:
1.用OSCache进行缓存对象 http://blog.csdn.net/zhifeng172/article/details/7608682
2.Cache技术――OSCache http://shijincheng0223.iteye.com/blog/1412128