高併發秒殺專案 05

2021-10-07 05:32:00 字數 4068 閱讀 6924

頁面快取

改造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 操作完之後...