OSCache入门系列(六)

2010年5月29日 由 yybean 留言 »

tip:如果要查看这一系列文章,可点击 这里

 

第五部分 一个典型应用场景

 

在SSH项目应用中,可以以对象的形式来缓存展现给用户的数据信息。对象的缓存要充分利用分组带来的好处(可以分组删除被缓存的对象),这样在执行数据库的CUD操作时,可以调用删除相应组别的缓存对象。

示例代码:

private CacheManager cm;
    private final static String CACHE_KEY_SUB="RetJobs";
    public JobAction() {
      //获取缓存管理对象

       cm = CacheManager.getInstance();

    }

查询部分
       page=(Page<RetJob>)(cm.get(CACHE_KEY_SUB+"_"+currentPage));
       if(page==null){

           //--------------------需要缓存对象部分-----------------------

           page = retJobBaseModel.getJobs(currentPage, pageSize, statusCondition);

           //-------------------------------------------

           //缓存对象(含所属分组信息)

           cm.put(page, CACHE_KEY_SUB+"_"+currentPage,new String[]{CACHE_KEY_SUB});

       }
 
CUD操作部分

setCacheDisabled(CACHE_KEY_SUB);
    private void setCacheDisabled(String group) {

       //通过组别信息来删除缓存的对象。

       cm.removeObjectByGroup(group);

    }
CacheManager 类

public class CacheManager {

    private BaseCache newsCache;

    private static CacheManager instance;

    private static Object lock = new Object();

    private CacheManager() {

       // 这个根据配置文件来,初始BaseCache而已;

       newsCache = new BaseCache("hrms", 300);

    }

    public static CacheManager getInstance() {

       if (instance == null) {

           synchronized (lock) {

              if (instance == null) {

                  instance = new CacheManager();

              }

           }

       }

       return instance;

    }

    public void put(Object news,String key,String[] groups) {

       newsCache.put(key, news,groups);

    }

    public void remove(String key) {

       newsCache.remove(key);

    }

    public Object get(String key) {

       try {

           return newsCache.get(key);

       } catch (Exception e) {

           return null;

       }

    }

    public void removeAll() {

       newsCache.removeAll();

    }   

    public void removeObjectByGroup(String group){

       newsCache.removeObjectByGroup(group);

    }

}
BaseCache 类增加的2个方法如下:

    // 添加被缓存的对象;

    public void put(String key, Object value,String[] groups) {

       this.putInCache(this.keyPrefix + "_" + key, value,groups);

    }

    //删除该组的缓存对象

    public void removeObjectByGroup(String group){

       this.flushGroup(group);

    }

 

参阅资料:

[0]:http://www.opensymphony.com/oscache/

[1]:OSCache简介

[2]:OSCache分析

[3]:OSCache——学习笔记

[4]:应用OSCache提升J2EE系统运行性能

[5]:[Java]用OSCache进行缓存对象

[6]:osCache 配置说明

[7]:缓存漫谈





发表评论