鎖必須具備的特點(diǎn)
1唉堪、互斥: 任意時(shí)刻, 只能有一個(gè)客戶(hù)端獲得鎖
2盆偿、不會(huì)死鎖: 客戶(hù)端持有鎖期間崩潰, 沒(méi)有主動(dòng)解除鎖, 能保證后續(xù)的其他客戶(hù)端獲得鎖(加一個(gè)短暫的過(guò)期時(shí)間)
3、鎖歸屬標(biāo)識(shí): 加鎖和解鎖的必須是同一個(gè)客戶(hù)端, 客戶(hù)端不能解掉非自己持有的鎖(鎖應(yīng)具備標(biāo)識(shí))
以下是PHP代碼
$redis = new Redis();
$redis->pconnect("127.0.0.1", 6379);
$redis->auth("password"); // 密碼驗(yàn)證
$redis->select(1); // 選擇所使用的數(shù)據(jù)庫(kù), 默認(rèn)有16個(gè)
$lock_key = 'LOCK_KEY;
$is_lock = $redis->exists($lock_key);
if(!$is_lock) { // 如果沒(méi)有鎖
$redis->set($lock_key, 1, 'nx', 'ex', 4); // 加鎖,持續(xù)4秒
try{
//業(yè)務(wù)邏輯
}catch(Exception $e){
$redis->del($lock_key);//發(fā)生異常也解鎖
}
$redis->del($lock_key);
return ['code' => '0000', 'msg' => '領(lǐng)取成功'];
}else{
return ['code'=>'1005','msg'=>'請(qǐng)稍后重試'];
}