頁面快取
改造goodscontroller中的方法,加入thymeleafviewresolver註解
//手動渲染
springwebcontext ctx =
newspringwebcontext
(request, response, request.
getservletcontext()
, request.
getlocale()
, model.
asmap()
; html = thymeleafviewresolver.
gettemplateengine()
.process
("goods_list"
, ctx);if
(!stringutils.
isempty
(html)
)return html;
}goodskey :作為頁面快取的快取key的字首,快取有效時間,一般設定為1分鐘
public
class
goodskey
extends
baseprefix
public
static goodskey getgoodslist =
newgoodskey(60
,"gl");
public
static goodskey getgoodsdetail =
newgoodskey(60
,"gd");
}
url快取
相當於頁面快取,針對不同的詳情頁顯示不同快取頁面,對不同的url進行快取
;//轉化為毫秒
long startat = goods.
getstartdate()
.gettime()
; long endat = goods.
getenddate()
.gettime()
; long now = system.
currenttimemillis()
; int miaoshastatus =0;
//秒殺狀態
int remainseconds =0;
//距離開始秒殺還有多少秒
if(now < startat)
else
if(now > endat)
else
model.
addattribute
("miaoshastatus"
, miaoshastatus)
; model.
addattribute
("remainseconds"
, remainseconds)
; springwebcontext ctx =
newspringwebcontext
(request, response, request.
getservletcontext()
, request.
getlocale()
, model.
asmap()
; html = thymeleafviewresolver.
gettemplateengine()
.process
("goods_detail"
, ctx);if
(!stringutils.
isempty
(html)
)return html;
}物件快取
miaoshauserservice裡面增加getbyid方法,先去取快取,如果快取中拿不到,那麼就去取資料庫,然後再設定到快取中去
public miaoshauser getbyid
(long id)
//取資料庫
user = miaoshauserdao.
getbyid
(id);if
(user !=
null
)return user;
// return miaoshauserdao.getbyid(id);
}
更新使用者密碼:更新資料庫與快取,一定保證資料一致性,修改token關聯的物件以及id關聯的物件,先更新資料庫後刪除快取,不能直接刪除token,刪除之後就不能登入了,再將token以及對應的使用者資訊一起再寫回快取裡面去。
public boolean updatepassword
(string token, long id, string formpass)
//更新資料庫
miaoshauser tobeupdate =
newmiaoshauser()
; tobeupdate.
setid
(id)
; tobeupdate.
setpassword
(md5util.
formpasstodbpass
(formpass, miaoshauser.
getsalt()
)); miaoshauserdao.
update
(tobeupdate)
;//處理快取
redisservice.
delete
(miaoshauserkey.getbyid,
""+id)
; miaoshauser.
setpassword
(tobeupdate.
getpassword()
);redisservice.
set(miaoshauserkey.token, token, miaoshauser)
;//更新token
return
true
;}
redisservice裡面的delete方法
public boolean delete
(keyprefix prefix, string key)
finally
}
miaoshauserdao 中的update方法
@update
("update miaosha_user set password = # where id = #"
)public
void
update
(miaoshauser tobeupdate)
;
高併發 秒殺業務場景詳解
一 秒殺場景的特點 秒殺的商品具有 低 庫存有限 定時開始的特點,因此秒殺場景最大的特點就是高併發。數以千萬的使用者的流量集中在某個時間點上 即秒殺開始時 給後端伺服器造成很大壓力,如果不能進行有效削峰 限流,所有請求一次性打到某一台伺服器或資料庫上,必然造成服務的不可用,給使用者造成不良體驗。二 ...
高併發秒殺系統方案(簡介)
memcatch相比redis而言,無法做持久化。jsr303 服務端的驗證框架。首先我們可以將靜態頁面快取在使用者的瀏覽器端或者是手機端,然後使用者的請求會到達cdn 的快取和映象 進一步到達閘道器 我們這裡是nginx,在nginx上繼續做快取 再到我們的應用伺服器 同樣可以做快取 redis快...
高併發下的秒殺 搶東西
這裡以tp框架為例子 這個方法核心就是鎖表和解鎖 這裡鎖定tests表 m execute lock tables tests write data m tests find 1 if data counts 0 m tests where id 1 setdec counts else 操作完之後...