memcached怎么样实现分页缓存

MySql 码拜 8年前 (2016-02-15) 1097次浏览
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);
		}
	}

在新增 修改 和删除的时候 会清除缓存.
现在问题是 怎么样根据不同的分页保存 缓存 当有新增 修改 和删除 怎么样删除相应的缓存 .

解决方案

22

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明memcached怎么样实现分页缓存
喜欢 (0)
[1034331897@qq.com]
分享 (0)