发表于: 2017-11-07 23:26:37

1 684


今天完成的事情:

使用memcached对剩余页面添加缓存.把那个逻辑混乱的问题解决了.

/**
*根据用户账户查询密码
*/
public String selectUser(String userName){
//        String getUsername = userName;
   String getUserPassword = String.valueOf(memCachedClient.get(userName));
   logger.info("根据账号从缓存中获取密码"+ userName + getUserPassword);
   if (getUserPassword == "null"){
String userPassword = studentDao.selectUser(userName);
       logger.info("从数据库中获取密码" + userName + userPassword);
       boolean success = memCachedClient.set(userName,userPassword);
       logger.info("添加账户密码至缓存" + success);
       return userPassword;
   }return  getUserPassword;
}
}
public  List<Form> listFormAll(){

List<Form> forms = null;
   String getMemsFormsAll = String.valueOf(memCachedClient.get("memFormAll"));
   logger.info("缓存中获得所有职业" + getMemsFormsAll);
   if(getMemsFormsAll == "null"){
forms = formDao.listFormAll();
       logger.info("从数据库获取全部职业信息"+ forms);
       String addMemFormAll= JSON.toJSONString(forms);
       boolean success = memCachedClient.set("memFormAll",addMemFormAll);
       logger.info("将全部职业信息存入缓存"+ success);
       return forms;
   }else {
forms = JSON.parseObject(getMemsFormsAll,List.class);
       List<Form> formAll = formDao.listFormAll();
       logger.info("查询到的所有职业信息" + formAll);
       return formAll;
   }
}

}

学习了缓存穿透概念...

在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时,可能DB就挂掉了。

解决呢办法就是无论这个人有输入什么账户密码都将其存在缓存中..设置一个时间.

目前我的解决思路是登录之后对账户密码做对比,,若对比失败则讲这个失败值储存起来,,设置一个时间,,

登录过程中先查询缓存,如果没有缓存就查询数据库并储存缓存..

 如果缓存中有值,就从缓存中取值与数据库取出的密码做对比,如果密码正确就返回从缓存中取出的密码,  如果密码不正确就讲这个账户密码存在缓存中有效期设置为5分钟.返回一个0,

    public String selectUser(String userName) {
//        String getUsername = userName;
       String getUserPassword = String.valueOf(memCachedClient.get(userName));
       logger.info("根据账号从缓存中获取密码" + userName + getUserPassword);
       if (getUserPassword == "null") {
String userPassword = studentDao.selectUser(userName);
           logger.info("从数据库中获取密码" + userName + userPassword);
           boolean success = memCachedClient.set(userName, userPassword);
           logger.info("添加账户密码至缓存" + success);
           return userPassword;
       } else {
if (getUserPassword.equals(studentDao.selectUser(userName))) {
return getUserPassword;
           }
memCachedClient.set(userName, 0, 60 * 5);
       }
return "0";
   }
}

缓存这面逻辑还是没有 搞清楚..

明天计划完成的事情:

配置两个web容器,使用负载均衡.再次进行测试.

遇到的困难:


任务进度:任务6步骤1

任务开始时间:2017-11-4

预计demo时间:2017-11-12

是否有延期风险:暂无

禅道:http://task.ptteng.com/zentao/project-task-384.html




返回列表 返回列表
评论

    分享到