一、为什么要优化
我们以往都是对数据库进行直接操作,如果数据过大,对数据库的操作会非常慢,所以为了提高查询的速度,可以将数据放入到缓存中,即每次查询数据都是先经过缓存,缓存中没有数据的话再对数据库进行操作,这样可以大大提高对数据处理的效率。
二、优化
1、页面缓存
@RequestMapping(value="/to_list", produces="text/html")
@ResponseBody
public String list(HttpServletRequest request, HttpServletResponse response, Model model,MiaoshaUser user) {
model.addAttribute("user", user);
//取缓存
String html = redisService.get(GoodsKey.getGoodsList, "", String.class); // 1 先从缓存拿
if(!StringUtils.isEmpty(html)) {
return html;
}
List<GoodsVo> goodsList = goodsService.listGoodsVo(); // 2 数据库
model.addAttribute("goodsList", goodsList);
SpringWebContext ctx = new SpringWebContext(request,response,
request.getServletContext(),request.getLocale(), model.asMap(), applicationContext );
//手动渲染
html = thymeleafViewResolver.getTemplateEngine().process("goods_list", ctx);
if(!StringUtils.isEmpty(html)) {
redisService.set(GoodsKey.getGoodsList, "", html);
}
return html;
}
2、对象缓存
public MiaoshaUser getById(long id) {
//先取缓存
MiaoshaUser user = redisService.get(MiaoshaUserKey.getById, ""+id, MiaoshaUser.class);
if(user != null) {
return user;
}
//缓存没有取数据库
user = miaoshaUserDao.getById(id);
if(user != null) {
redisService.set(MiaoshaUserKey.getById, ""+id, user); // 存入缓存
}
return user;
}
// http://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/78693323 缓存
public boolean updatePassword(String token, long id, String formPass) {
//取user
MiaoshaUser user = getById(id);
if(user == null) {
throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);
}
//更新数据库 1
MiaoshaUser toBeUpdate = new MiaoshaUser();
toBeUpdate.setId(id);
toBeUpdate.setPassword(MD5Util.formPassToDBPass(formPass, user.getSalt()));
miaoshaUserDao.update(toBeUpdate);
//处理缓存 2
redisService.delete(MiaoshaUserKey.getById, ""+id); // 先把以前的删掉
user.setPassword(toBeUpdate.getPassword());
redisService.set(MiaoshaUserKey.token, token, user); // 再存
return true;
}
不管是页面缓存还是对象缓存原理都是一样的,都是先经过缓存再经过数据库,对数据进行添加和更新时先经过数据库再放入到缓存,从而提高效率。