成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

redis鎖處理并發(fā) 怎么實(shí)現(xiàn)redis的讀鎖?

怎么實(shí)現(xiàn)redis的讀鎖?避免落入setnx(set if not exists)陷阱的最好方法是永遠(yuǎn)不要使用它:setnx lock“l(fā)ock”expire lock 100del lock場(chǎng)景:查

怎么實(shí)現(xiàn)redis的讀鎖?

避免落入setnx(set if not exists)陷阱的最好方法是永遠(yuǎn)不要使用它:

setnx lock“l(fā)ock”

expire lock 100

del lock

場(chǎng)景:查詢數(shù)據(jù)庫(kù)的接口有大量調(diào)用,因此添加了緩存,緩存設(shè)置為過期后刷新。

問題是當(dāng)并發(fā)性大,如果沒有鎖機(jī)制,大量的并發(fā)請(qǐng)求會(huì)在緩存過期時(shí)穿透緩存直接查詢數(shù)據(jù)庫(kù),造成雪崩效應(yīng)如果有鎖機(jī)制,只能控制一個(gè)請(qǐng)求更新緩存。其他請(qǐng)求根據(jù)情況等待或使用過期的緩存。

$key=“cache update Lock”//Lock

$random=MD5(uniqid(getmypid())。“”.mturand().“”,true))//隨機(jī)值

$TTL=10//NX不存在,ex為過期時(shí)間,TTL為生存時(shí)間,單位為秒

if($redis->set($key,$random,[“NX”,“ex”=>$TTL]){

$cache->update()//鎖定后執(zhí)行業(yè)務(wù)邏輯,這里是update cache

//添加隨機(jī)值判斷避免刪除其他操作的鎖

如果($redis->get($key)==$random){

$redis->del($key)}