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——学习笔记
[6]:osCache 配置说明
[7]:缓存漫谈