memcached如何实现分页缓存,求思路 谢谢.public IPaging<MessageBean> queryPageList(QueryParam param, long uid,
int pageSize, int page) {
   if(param.edate==0&&param.sdate==0){//没有查询条件才开始使用缓存
IPaging<MessageBean> paginglist;
List<MessageBean>lists=null;

//获取缓存
try{
lists =(List<MessageBean>)NewMemcachedUtil.get("message"+"_"+uid);
}catch(Exception ex){
System.out.println("getCustomerType Exception");
ex.printStackTrace();
}
if(lists!=null){
paginglist = (IPaging<MessageBean>) IPaging.Factroy.New();
paginglist.setList(lists);
return paginglist;
}
else{
paginglist=IMessageDao.Factory.New().queryPage(param, uid, pageSize, page);
lists=paginglist.getList();
//添加缓存
boolean result=false;
try{
 result =NewMemcachedUtil.put("message"+"_"+uid, lists, 60);
}catch(Exception ex){
System.out.println("save message Exception ");
ex.printStackTrace();
}

if(result){
 SysEnv.getVccLogger().info("memcached save Object Sucess", true, "memcached  Object key:"+"message"+"_"+uid+" is null and save it,expiry is 1 day");
}else{
 SysEnv.getVccLogger().info("memcached save Object failt", false, "memcached  Object key:"+"message"+"_"+uid+" is null and save it,expiry is 1 day");
}
return paginglist;
}

}else{
return IMessageDao.Factory.New().queryPage(param, uid, pageSize, page);
}
}
在新增 修改 和删除的时候 会清除缓存.
现在问题是 如何根据不同的分页保存 缓存 当有新增 修改 和删除 如何删除相应的缓存 .

解决方案 »

  1.   

    思路
    两种方式:
    1、如果这个数据是经常操作的,而且要求不是很实时的,可以写个定时来处理缓存,即:更新缓存中的数据;
    2、如果需要实时的话,给新增 修改 和删除添加一个监听,每次操作的时候把缓存给干掉;当查询的时候,先缓存,再数据库的原则,不多说了。
    当然还有些人是一次性把所有数据弄到缓存中再分页的,曾经测试了下 不是很高效。