卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

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

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

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

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

setnx lock“l(fā)ock”

expire lock 100

del lock

場景:查詢數據庫的接口有大量調用,因此添加了緩存,緩存設置為過期后刷新。

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

$key=“cache update Lock”//Lock

$random=MD5(uniqid(getmypid())?!啊?mturand().“”,true))//隨機值

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

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

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

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

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

$redis->del($key)}