Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409327
  • 博文数量: 155
  • 博客积分: 2590
  • 博客等级: 少校
  • 技术积分: 2161
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-25 09:33
文章分类

全部博文(155)

文章存档

2015年(1)

2014年(2)

2013年(55)

2012年(97)

分类: Java

2012-11-29 13:27:54

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
 
项目后台系统做权限管理,菜单每次都是动态生成,为了加快访问速度,我将每次查出来的菜单map放入memcached中,但是奇怪的是通过断点我发现每次刷新还是查的数据库,通过仔细排查,我发现每次memcached写入都失败,我写死一个值,就没有问题,于是我就想肯定是我要写入的东西出了问题。
 
写入的东西是这个,请看代码:
 
if (result ==null) {
 result = invocation.proceed();
this.memCache.put(cacheKey,result, time);
}
简单解释一下,每次判断result是否为null,如果null,则执行invocation.proceed(),等同于正常调用,相当于走如下方法:
 
public Map> getMenuMapByRoleId(Integer roleId) {
      Map> map=newLinkedHashMap>() ;
      List list=menuDAO.getMenuListByRoleId(roleId,0);
      for(Menu menu:list){
          List secondMenuList=menuDAO.getMenuListByRoleId(roleId,menu.getId());
          map.put(menu, secondMenuList);
      }
      return map;
}
 
其实每次放入memcached中的值是Map>,这个东西为什么每次都写入失败,经过排查,才发现memcached
中写入的数据必须是可序列化的,而Menu实体我却忘记实现了Serializable接口,所以每次会写入失败。

行业门户()文章,希望大家可以留言建议

阅读(1305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~