如何進行優化的秒殺?

一、爲什麼要優化

我們以往都是對數據庫進行直接操作,如果數據過大,對數據庫的操作會非常慢,所以爲了提高查詢的速度,可以將數據放入到緩存中,即每次查詢數據都是先經過緩存,緩存中沒有數據的話再對數據庫進行操作,這樣可以大大提高對數據處理的效率。

二、優化

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;
	}

      不管是頁面緩存還是對象緩存原理都是一樣的,都是先經過緩存再經過數據庫,對數據進行添加和更新時先經過數據庫再放入到緩存,從而提高效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章