php實(shí)現(xiàn)分布式鎖代碼

```

/**

* Created by PhpStorm.

* User: wangjianglong

* Date: 2020/4/16

* Time: 14:57

*/

/**

* 實(shí)現(xiàn)Redis分布式鎖

*/

$redis=new Redis();

$redis->connect("127.0.0.1",6379);

$key? ? ? ? = 'test';? ? ? //要更新信息的緩存KEY

$lockKey? ? = 'lock:'.$key; //設(shè)置鎖KEY

$lockExpire = 10;? ? ? ? ? //設(shè)置鎖的有效期為10秒

//獲取緩存信息

$result = $redis->get($key);

//判斷緩存中是否有數(shù)據(jù)

if(empty($result)){

? ? $status=TRUE;

? ? while ($status){

? ? ? ? //設(shè)置鎖值為當(dāng)前時(shí)間戳 + 有效期

? ? ? ? $lockValue = time() + $lockExpire;

? ? ? ? /**

? ? ? ? * 創(chuàng)建鎖

? ? ? ? * 試圖以$lockKey為key創(chuàng)建一個(gè)緩存,value值為當(dāng)前時(shí)間戳

? ? ? ? * 由于setnx()函數(shù)只有在不存在當(dāng)前key的緩存時(shí)才會(huì)創(chuàng)建成功

? ? ? ? * 所以,用此函數(shù)就可以判斷當(dāng)前執(zhí)行的操作是否已經(jīng)有其他進(jìn)程在執(zhí)行了

? ? ? ? * @var [type]

*/

? ? ? ? $lock=$redis->setnx($lockKey,$lockValue);

? ? ? ? /**

? ? ? ? * 滿足兩個(gè)條件中的一個(gè)即可進(jìn)行操作

? ? ? ? * 1、上面一步創(chuàng)建鎖成功;

? ? ? ? * 2、? 1)判斷鎖的值(時(shí)間戳)是否小于當(dāng)前時(shí)間? ? $redis->get()

? ? ? ? *? ? ? 2)同時(shí)給鎖設(shè)置新值成功? ? $redis->getset()

*/

? ? ? ? if(!empty($lock) || ($redis->get($lockKey)<time() && $redis->getSet($lockKey, $lockValue) < time())){

? ? ? ? ? ? //給鎖設(shè)置生存時(shí)間

? ? ? ? ? ? $redis->expire($lockKey,$lockExpire);

? ? ? ? ? ? //******************************

? ? ? ? ? ? //此處執(zhí)行插入、更新緩存操作...

//******************************

? ? ? ? ? ? //以上程序走完刪除鎖

? ? ? ? ? ? //檢測(cè)鎖是否過期,過期鎖沒必要?jiǎng)h除

? ? ? ? ? ? if($redis->ttl($lockKey)){

? ? ? ? ? ? ? ? $redis->del($lockKey);

}

? ? ? ? ? ? echo "finished";

? ? ? ? ? ? $status=false;

? ? ? ? }else{

? ? ? ? ? ? /**

? ? ? ? ? ? * 如果存在有效鎖這里做相應(yīng)處理

? ? ? ? ? ? *? ? ? 等待當(dāng)前操作完成再執(zhí)行此次請(qǐng)求

? ? ? ? ? ? *? ? ? 直接返回

? ? ? ? ? ? */

? ? ? ? ? ? sleep(2);//等待2秒后再嘗試執(zhí)行操作

? ? ? ? }

}

}

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容