关于ehcache缓存的使用疑惑【已解决】

public void cache(){
String id = getPara("id");
//保存的策略是60time,找这个缓存byId
Keypage cacheMap = CacheKit.get("60time", id);
//如果这个ById的缓存不存在,则查询一下数据,进行保存
if (cacheMap == null) {
cacheMap = new Keypage();
cacheMap.put(id, Keypage.dao.findById(id)); 
CacheKit.put("60time", id, cacheMap);
}
//-----------疑惑就出现在这里 Start--------------
//----------前端enjoy渲染的时候使用-----------
setAttr("cacheMap", cacheMap);
/**
 * 问:
 * 如果我不是单单一个记录,而不是用到findById,也不是用到findByCache,而且经常业务逻辑处理之后的属性改怎么保存呢?
 * ---解决办法:难道要new map ,把所有属性都put进去吗?如果整个项目很庞大,这种方式好像很吃力。前端enjoy调用也要进行修改
 */
//-----------疑惑就出现在这里 End--------------
List s = CacheKit.getKeys("60time");
//查询缓存了多少个记录
for (Object object : s) {
logger.info(object);
}
renderJson(cacheMap + "所有缓存keys :" +CacheKit.getKeys("60time"));
}


评论区

fmpoffice

2018-01-22 17:39

想了个办法:#set(productListsJson = cacheMap["productListsJson"] , totalResult = cacheMap["totalResult"],keypage = cacheMap["keypage"],currentPage = cacheMap["currentPage"],totalPage = cacheMap["totalPage"],url = cacheMap["url"])
页面就不需要改动太大了。。

JFinal

2018-01-22 17:47

List s 这个列表中只存放 Integer 型的 id 号,从缓存中得到 List 以后,再从缓存中去取,通过 id 取具体的 model

这样就可以确保 model 在内存中只有一个副本,当对该 model 进行过修改时,只需要从缓存中移除该 model: CacheKit.remove(..., id)

这里还需要注意一个情况,就是 model 被删除的情况,那么用 List s 从 cahce 中取的时候注意一下

热门反馈

扫码入社