memcached怎么样实现分页缓存,求思路 谢谢.
public IPaging<MessageBean> queryPageList(QueryParam param, long uid, int pageSize, int page) { if(param.edate==0&¶m.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); } }
在新增 修改 和删除的时候 会清除缓存.
现在问题是 怎么样根据不同的分页保存 缓存 当有新增 修改 和删除 怎么样删除相应的缓存 .
解决方案
22
思路
两种方式:
1、假如这个数据是经常操作的,而且要求不是很实时的,可以写个定时来处理缓存,即:更新缓存中的数据;
2、假如需要实时的话,给新增 修改 和删除添加一个监听,每次操作的时候把缓存给干掉;当查询的时候,先缓存,再数据库的原则,不多说了。
当然还有些人是一次性把全部数据弄到缓存中再分页的,曾经测试了下 不是很高效。
两种方式:
1、假如这个数据是经常操作的,而且要求不是很实时的,可以写个定时来处理缓存,即:更新缓存中的数据;
2、假如需要实时的话,给新增 修改 和删除添加一个监听,每次操作的时候把缓存给干掉;当查询的时候,先缓存,再数据库的原则,不多说了。
当然还有些人是一次性把全部数据弄到缓存中再分页的,曾经测试了下 不是很高效。