发表于: 2017-11-07 23:26:37
1 686
今天完成的事情:
使用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
评论