婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > redis實(shí)現(xiàn)加鎖的幾種方法示例詳解

redis實(shí)現(xiàn)加鎖的幾種方法示例詳解

熱門標(biāo)簽:百度商家地圖標(biāo)注怎么做 地圖標(biāo)注如何即時生效 太原營銷外呼系統(tǒng) 竹間科技AI電銷機(jī)器人 地圖標(biāo)注費(fèi)用 小紅書怎么地圖標(biāo)注店 最簡單的百度地圖標(biāo)注 玄武湖地圖標(biāo)注 西藏教育智能外呼系統(tǒng)價格

前言

本文主要給大家介紹了關(guān)于redis實(shí)現(xiàn)加鎖的幾種方法,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

1. redis加鎖分類

redis能用的的加鎖命令分表是INCR、SETNX、SET

2. 第一種鎖命令I(lǐng)NCR

這種加鎖的思路是, key 不存在,那么 key 的值會先被初始化為 0 ,然后再執(zhí)行 INCR 操作進(jìn)行加一。
然后其它用戶在執(zhí)行 INCR 操作進(jìn)行加一時,如果返回的數(shù)大于 1 ,說明這個鎖正在被使用當(dāng)中。

    1、 客戶端A請求服務(wù)器獲取key的值為1表示獲取了鎖 

    2、 客戶端B也去請求服務(wù)器獲取key的值為2表示獲取鎖失敗

    3、 客戶端A執(zhí)行代碼完成,刪除鎖

    4、 客戶端B在等待一段時間后在去請求的時候獲取key的值為1表示獲取鎖成功

    5、 客戶端B執(zhí)行代碼完成,刪除鎖

 $redis->incr($key);
 $redis->expire($key, $ttl); //設(shè)置生成時間為1秒

3. 第二種鎖SETNX

這種加鎖的思路是,如果 key 不存在,將 key 設(shè)置為 value

如果 key 已存在,則 SETNX 不做任何動作

    1、 客戶端A請求服務(wù)器設(shè)置key的值,如果設(shè)置成功就表示加鎖成功

    2、 客戶端B也去請求服務(wù)器設(shè)置key的值,如果返回失敗,那么就代表加鎖失敗

    3、 客戶端A執(zhí)行代碼完成,刪除鎖

    4、 客戶端B在等待一段時間后在去請求設(shè)置key的值,設(shè)置成功

    5、 客戶端B執(zhí)行代碼完成,刪除鎖   

  $redis->setNX($key, $value);
  $redis->expire($key, $ttl);

4. 第三種鎖SET

上面兩種方法都有一個問題,會發(fā)現(xiàn),都需要設(shè)置 key 過期。那么為什么要設(shè)置key過期呢?如果請求執(zhí)行因?yàn)槟承┰蛞馔馔顺隽耍瑢?dǎo)致創(chuàng)建了鎖但是沒有刪除鎖,那么這個鎖將一直存在,以至于以后緩存再也得不到更新。于是乎我們需要給鎖加一個過期時間以防不測。

但是借助 Expire 來設(shè)置就不是原子性操作了。所以還可以通過事務(wù)來確保原子性,但是還是有些問題,所以官方就引用了另外一個,使用 SET 命令本身已經(jīng)從版本 2.6.12 開始包含了設(shè)置過期時間的功能。

    1、 客戶端A請求服務(wù)器設(shè)置key的值,如果設(shè)置成功就表示加鎖成功

    2、 客戶端B也去請求服務(wù)器設(shè)置key的值,如果返回失敗,那么就代表加鎖失敗

    3、 客戶端A執(zhí)行代碼完成,刪除鎖

    4、 客戶端B在等待一段時間后在去請求設(shè)置key的值,設(shè)置成功

    5、 客戶端B執(zhí)行代碼完成,刪除鎖

  $redis->set($key, $value, array('nx', 'ex' => $ttl)); //ex表示秒

5. 其它問題

雖然上面一步已經(jīng)滿足了我們的需求,但是還是要考慮其它問題?

    1、 redis發(fā)現(xiàn)鎖失敗了要怎么辦?中斷請求還是循環(huán)請求?

    2、 循環(huán)請求的話,如果有一個獲取了鎖,其它的在去獲取鎖的時候,是不是容易發(fā)生搶鎖的可能?

    3、 鎖提前過期后,客戶端A還沒執(zhí)行完,然后客戶端B獲取到了鎖,這時候客戶端A執(zhí)行完了,會不會在刪鎖的時候把B的鎖給刪掉?

6. 解決辦法

針對問題1:使用循環(huán)請求,循環(huán)請求去獲取鎖

針對問題2:針對第二個問題,在循環(huán)請求獲取鎖的時候,加入睡眠功能,等待幾毫秒在執(zhí)行循環(huán)

針對問題3:在加鎖的時候存入的key是隨機(jī)的。這樣的話,每次在刪除key的時候判斷下存入的key里的value和自己存的是否一樣

    do { //針對問題1,使用循環(huán)
      $timeout = 10;
      $roomid = 10001;
      $key = 'room_lock';
      $value = 'room_'.$roomid; //分配一個隨機(jī)的值針對問題3
      $isLock = Redis::set($key, $value, 'ex', $timeout, 'nx');//ex 秒
      if ($isLock) {
        if (Redis::get($key) == $value) { //防止提前過期,誤刪其它請求創(chuàng)建的鎖
          //執(zhí)行內(nèi)部代碼
          Redis::del($key);
          continue;//執(zhí)行成功刪除key并跳出循環(huán)
        }
      } else {
        usleep(5000); //睡眠,降低搶鎖頻率,緩解redis壓力,針對問題2
      }
    } while(!$isLock);

7. 另外一個鎖

以上的鎖完全滿足了需求,但是官方另外還提供了一套加鎖的算法,這里以PHP為例

  $servers = [
    ['127.0.0.1', 6379, 0.01],
    ['127.0.0.1', 6389, 0.01],
    ['127.0.0.1', 6399, 0.01],
  ];
  
  $redLock = new RedLock($servers);
  
  //加鎖
  $lock = $redLock->lock('my_resource_name', 1000);
  
  //刪除鎖
  $redLock->unlock($lock)

上面是官方提供的一個加鎖方法,就是和第6的大體方法一樣,只不過官方寫的更健壯。所以可以直接使用官方提供寫好的類方法進(jìn)行調(diào)用。官方提供了各種語言如何實(shí)現(xiàn)鎖。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • 淺談redis加鎖常用幾種方式

標(biāo)簽:林芝 景德鎮(zhèn) 贛州 香港 唐山 廣東 澳門 揚(yáng)州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis實(shí)現(xiàn)加鎖的幾種方法示例詳解》,本文關(guān)鍵詞  redis,實(shí)現(xiàn),加鎖,的,幾種,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis實(shí)現(xiàn)加鎖的幾種方法示例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于redis實(shí)現(xiàn)加鎖的幾種方法示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩激情在线观看| 亚洲国产中文字幕| 国产精品亚洲一区二区三区妖精| 中文字幕一区二区三区在线播放 | 成人激情免费网站| 91麻豆精品视频| 欧美日韩精品三区| 亚洲国产成人在线| 亚洲精品va在线观看| 亚洲人成电影网站色mp4| 中文字幕在线视频一区| 日本中文字幕一区二区有限公司| 国产一区二区日韩精品| 日韩欧美一级二级三级| 久久美女艺术照精彩视频福利播放| 亚洲人成7777| 欧美另类z0zxhd电影| 成人午夜视频在线| 色综合网站在线| 99久久精品国产一区二区三区| 色久优优欧美色久优优| 一区在线播放视频| 久久av老司机精品网站导航| 国产福利不卡视频| 国产美女精品一区二区三区| 欧美日韩精品三区| www一区二区| 丁香网亚洲国际| 日韩欧美国产午夜精品| 国产精品中文欧美| 99精品国产视频| 亚洲成人综合视频| 国产aⅴ精品一区二区三区色成熟| 国产日产欧产精品推荐色| 亚洲精品免费播放| 99久久99久久久精品齐齐| 日韩女优av电影| 天天av天天翘天天综合网色鬼国产 | 欧美性xxxxx极品少妇| 久久精品一区蜜桃臀影院| 日韩福利视频导航| 一本大道av一区二区在线播放 | 日韩激情一区二区| 日韩一区二区三区在线观看| 美腿丝袜亚洲三区| 欧美吻胸吃奶大尺度电影| 蜜桃视频在线观看一区| www国产成人免费观看视频 深夜成人网 | 国产精品久久午夜| 3atv一区二区三区| 粉嫩在线一区二区三区视频| 亚洲欧美另类图片小说| 亚洲精品一区二区三区99| 一本一道久久a久久精品综合蜜臀| 中文字幕电影一区| 99久久精品99国产精品| 亚洲三级在线免费| 亚洲免费看黄网站| 欧美日韩免费在线视频| 国产女人水真多18毛片18精品视频 | 精品无人区卡一卡二卡三乱码免费卡| 不卡一区二区三区四区| 精品捆绑美女sm三区| 精品久久久久久最新网址| 一区二区三区四区在线播放| 这里只有精品99re| 亚洲精品一区二区三区在线观看| 亚洲精品国产成人久久av盗摄 | 美女mm1313爽爽久久久蜜臀| 久久亚洲综合色一区二区三区| 91在线精品一区二区三区| 亚洲欧洲色图综合| 香蕉久久一区二区不卡无毒影院 | 久久久久9999亚洲精品| 成人国产亚洲欧美成人综合网| 国产精品欧美一区二区三区| 日韩一区二区免费在线观看| 成人性生交大片免费看视频在线| 裸体健美xxxx欧美裸体表演| 午夜久久久久久久久| 亚洲电影第三页| 自拍偷拍亚洲欧美日韩| 日韩一区在线免费观看| 91久久久免费一区二区| 国产一区二区三区四| 亚洲一区二区三区四区在线| 国产一区二区成人久久免费影院| 国产一区二区三区四| 日韩欧美一级片| 99re这里都是精品| 成a人片亚洲日本久久| 国产精品二区一区二区aⅴ污介绍| 99久久精品久久久久久清纯| 免费观看30秒视频久久| 蜜臀精品一区二区三区在线观看| 国产一区久久久| 欧美一区二区免费视频| 视频一区二区三区在线| 欧美人牲a欧美精品| 亚洲日本在线视频观看| 亚洲男人的天堂一区二区| 成人伦理片在线| 午夜激情久久久| 成人精品视频一区| **性色生活片久久毛片| 成人激情电影免费在线观看| 一区二区三区日韩精品视频| 欧美女孩性生活视频| 99久久伊人精品| 日韩av中文字幕一区二区| 欧美美女直播网站| 精品一区二区三区的国产在线播放 | 天天操天天干天天综合网| 亚洲欧美国产77777| 国产精品久久久久aaaa樱花| 成人毛片视频在线观看| 秋霞影院一区二区| 一区二区三区欧美在线观看| 精品日韩在线观看| 欧美中文字幕一区二区三区| 奇米色777欧美一区二区| 中文字幕一区二区三| 国产欧美日韩另类一区| 久久久青草青青国产亚洲免观| 欧美午夜电影网| 这里只有精品电影| 精品人伦一区二区色婷婷| 欧美四级电影网| 欧美军同video69gay| 在线视频一区二区三| 欧美日韩在线一区二区| www.成人在线| 久久久影院官网| 欧美三级电影精品| 不卡一二三区首页| 亚洲h动漫在线| 精品少妇一区二区三区在线视频 | 欧美一区2区视频在线观看| 亚洲午夜视频在线观看| 亚洲综合999| 亚洲国产综合人成综合网站| 麻豆精品在线观看| 成人av午夜影院| 欧美日韩小视频| 久久精品一区二区| 亚洲尤物在线视频观看| 麻豆精品一区二区| 亚洲第一福利一区| 国产精品一二三在| 在线视频一区二区免费| 欧美一区二区三区爱爱| 久久精品一区蜜桃臀影院| 欧美xingq一区二区| 亚洲色图丝袜美腿| 国产成人综合视频| 国产精品456| 欧美一区日本一区韩国一区| 亚洲日本va午夜在线影院| 日韩精品一区二区三区四区 | 国产精品久久三| 久久精品久久精品| 在线免费一区三区| 久久精品一区蜜桃臀影院| 日韩电影一区二区三区四区| 北条麻妃国产九九精品视频| 欧美大片在线观看一区二区| 亚洲国产va精品久久久不卡综合| 国产成人亚洲精品狼色在线| 欧美一区二区播放| 亚洲高清一区二区三区| 99久久99久久综合| 国产午夜亚洲精品理论片色戒| 五月天视频一区| 色婷婷狠狠综合| 国产精品久久久久一区二区三区| 久久99国产精品成人| 欧美美女网站色| 一区二区成人在线视频| 99视频精品全部免费在线| 久久久精品蜜桃| 开心九九激情九九欧美日韩精美视频电影| 99国产精品久久久| 国产精品亲子乱子伦xxxx裸| 国产精品99久久久久久久女警| 欧美成人伊人久久综合网| 一级中文字幕一区二区| 99综合电影在线视频| 国产午夜精品一区二区三区四区| 韩日欧美一区二区三区| 精品国产精品一区二区夜夜嗨| 美女脱光内衣内裤视频久久网站| 欧美高清你懂得| 日韩av在线免费观看不卡| 欧美日韩一区二区三区在线| 亚洲一区二区三区在线看| 欧美中文字幕一区二区三区| 亚洲电影你懂得| 欧美精品日韩一区| 天天影视色香欲综合网老头| 欧美精品一二三|