91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解php redis setnx分布式鎖

發布時間:2021-03-03 17:52:04 來源:億速云 閱讀:338 作者:TREX 欄目:開發技術

這篇文章主要介紹“如何理解php redis setnx分布式鎖”,在日常操作中,相信很多人在如何理解php redis setnx分布式鎖問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解php redis setnx分布式鎖”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

<?php
//高并發分布式鎖
header("Content-type:text/html;charset=utf-8");
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//echo $redis->get("name");exit;
$expire = 1;
$key = 'test1';
$lock = false;
$is_lock=$redis->setnx($key,time()+$expire);
if(!$is_lock){
$lock_time=$redis->get($key);
//鎖已過期,重置
if($lock_time<time()){
$redis->del($key);
$lock_time=$redis->get($key);
$is_lock=$redis->setnx($key,time()+$expire);
}
}

$is_lock ? true : false;
if($is_lock){
writeFile("正常訪問"."\n");
}else{
writeFile("系統繁忙"."\n");
}
function writeFile($data,$type='a'){
//sleep(1);
//usleep(500000);//假設暫停 500毫秒
$filename = date("Ymd").".log";
$handle =@ fopen($filename, $type);
flock($handle, LOCK_EX);
ob_start();
echo "\n" . "[SQL]" . "\n";
print_r ($data);
$string = ob_get_contents();
ob_end_clean();
$fettle = @fwrite($handle, $string);
fclose($handle);
@chmod($filename,0777);
}

補充知識:php redis set 單機鎖

如果一個請求更新緩存的時間比較長,甚至比鎖的有效期還要長,導致在緩存更新過程中,鎖就失效了,此時另一個請求會獲取鎖,但前一個請求在緩存更新完畢的時候,如果不加以判斷直接刪除鎖,就會出現誤刪除其它請求創建的鎖的情況,所以我們在創建鎖的時候需要引入一個隨機值:

$ok = $redis->set($key, $random, array('nx', 'ex' =>5));

if ($ok) {
  $cache->update();

  if ($redis->get($key) == $random) {
    $redis->del($key);
  }
}

到此,關于“如何理解php redis setnx分布式鎖”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南通市| 台州市| 桦甸市| 元阳县| 清镇市| 武隆县| 铅山县| 怀远县| 衡水市| 剑河县| 乌审旗| 大英县| 凤台县| 红原县| 闻喜县| 微山县| 南投县| 平顺县| 石首市| 咸宁市| 新化县| 湾仔区| 运城市| 石景山区| 屯昌县| 昌平区| 富川| 西和县| 资阳市| 开封市| 丹巴县| 嘉兴市| 海原县| 宜良县| 牙克石市| 皮山县| 连城县| 左权县| 舞钢市| 竹北市| 多伦县|