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

主頁 > 知識庫 > redis實現加鎖的幾種方法示例詳解

redis實現加鎖的幾種方法示例詳解

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

前言

本文主要給大家介紹了關于redis實現加鎖的幾種方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

1. redis加鎖分類

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

2. 第一種鎖命令INCR

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

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

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

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

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

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

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

3. 第二種鎖SETNX

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

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

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

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

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

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

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

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

4. 第三種鎖SET

上面兩種方法都有一個問題,會發現,都需要設置 key 過期。那么為什么要設置key過期呢?如果請求執行因為某些原因意外退出了,導致創建了鎖但是沒有刪除鎖,那么這個鎖將一直存在,以至于以后緩存再也得不到更新。于是乎我們需要給鎖加一個過期時間以防不測。

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

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

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

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

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

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

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

5. 其它問題

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

    1、 redis發現鎖失敗了要怎么辦?中斷請求還是循環請求?

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

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

6. 解決辦法

針對問題1:使用循環請求,循環請求去獲取鎖

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

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

    do { //針對問題1,使用循環
      $timeout = 10;
      $roomid = 10001;
      $key = 'room_lock';
      $value = 'room_'.$roomid; //分配一個隨機的值針對問題3
      $isLock = Redis::set($key, $value, 'ex', $timeout, 'nx');//ex 秒
      if ($isLock) {
        if (Redis::get($key) == $value) { //防止提前過期,誤刪其它請求創建的鎖
          //執行內部代碼
          Redis::del($key);
          continue;//執行成功刪除key并跳出循環
        }
      } 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的大體方法一樣,只不過官方寫的更健壯。所以可以直接使用官方提供寫好的類方法進行調用。官方提供了各種語言如何實現鎖。

總結

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

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

標簽:林芝 景德鎮 贛州 香港 唐山 廣東 澳門 揚州

巨人網絡通訊聲明:本文標題《redis實現加鎖的幾種方法示例詳解》,本文關鍵詞  redis,實現,加鎖,的,幾種,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《redis實現加鎖的幾種方法示例詳解》相關的同類信息!
  • 本頁收集關于redis實現加鎖的幾種方法示例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    天天操天天色综合| 中文欧美字幕免费| 欧美日本精品一区二区三区| 99国产一区二区三精品乱码| 成人理论电影网| 成人小视频免费观看| av激情综合网| 色综合中文综合网| 精品三级在线观看| 日韩午夜在线观看| 久久综合九色综合欧美98| 久久婷婷久久一区二区三区| 久久久国际精品| 久久久高清一区二区三区| 国产女人水真多18毛片18精品视频| 久久久久久久久久久久久夜| 国产精品亲子伦对白| 亚洲欧美另类久久久精品2019| 亚洲欧美日韩精品久久久久| 亚洲一二三四在线| 蜜桃视频一区二区| 国产精品一级片在线观看| 91在线精品一区二区| 欧美日韩精品二区第二页| 日韩美女视频在线| 国产精品久久毛片| 午夜精品久久久久久久久| 精品一区二区三区久久久| 成人高清免费观看| 欧美一区二区三区的| 国产欧美一区视频| 奇米色一区二区| av成人动漫在线观看| 日韩欧美国产综合| 中文字幕综合网| 麻豆精品国产91久久久久久| 99精品久久99久久久久| 日韩免费观看高清完整版在线观看| 国产精品无遮挡| 麻豆精品新av中文字幕| 色www精品视频在线观看| 欧美精品一区二区精品网| 亚洲伊人色欲综合网| 高清不卡一区二区在线| 国产亚洲精品超碰| 天堂成人国产精品一区| 91麻豆免费在线观看| 日韩精品综合一本久道在线视频| 《视频一区视频二区| 国产乱人伦偷精品视频免下载| 一本久久a久久精品亚洲| 日韩免费看的电影| 五月天久久比比资源色| 一本在线高清不卡dvd| 欧美激情在线免费观看| 久久99久久99精品免视看婷婷| 欧美日韩国产a| 亚洲乱码日产精品bd| 成人毛片老司机大片| 欧美激情综合五月色丁香| 国内不卡的二区三区中文字幕| 91精品欧美一区二区三区综合在| 亚洲一区中文在线| 色欧美片视频在线观看| 一色桃子久久精品亚洲| 国产69精品久久777的优势| 精品国产伦一区二区三区观看方式| 亚洲成人动漫精品| 欧美日韩另类国产亚洲欧美一级| 亚洲精品第1页| 在线视频一区二区免费| 亚洲精品高清在线观看| 欧美视频一区二区| 有坂深雪av一区二区精品| 不卡的av电影| 亚洲免费在线观看视频| 日本高清不卡在线观看| 亚洲午夜免费电影| 成人欧美一区二区三区白人 | 国产精品国产三级国产有无不卡| 国产乱子伦一区二区三区国色天香| 日韩欧美综合一区| 国产福利一区二区三区在线视频| 中文字幕欧美激情一区| www.成人在线| 亚洲毛片av在线| 欧美午夜电影网| 日韩高清电影一区| 精品毛片乱码1区2区3区| 成人午夜av影视| 亚洲专区一二三| 日韩一区二区在线看片| 国产精品综合网| 一区二区三区欧美亚洲| 日韩欧美国产综合在线一区二区三区| 国产在线国偷精品产拍免费yy| 国产精品乱码久久久久久| 91国产精品成人| 国产一区二区电影| 亚洲精品一二三区| 日韩一区二区三区四区| 99久精品国产| 久久精品久久久精品美女| 亚洲国产成人午夜在线一区| 欧美精品丝袜中出| 成人av资源网站| 爽爽淫人综合网网站| 久久久久国产免费免费| 欧美日韩aaaaa| 成人av在线观| 免费欧美高清视频| 亚洲三级免费电影| 欧美精品一区二区三区四区 | 一区视频在线播放| 制服.丝袜.亚洲.中文.综合| 国产91精品在线观看| 亚洲成va人在线观看| 国产精品成人网| 欧美www视频| 欧美日韩成人在线| 一本大道久久a久久精二百| 国模大尺度一区二区三区| 亚洲一卡二卡三卡四卡五卡| 国产精品女主播在线观看| 欧美一区二区视频在线观看| eeuss鲁片一区二区三区 | 欧美三级午夜理伦三级中视频| 久久不见久久见中文字幕免费| 亚洲欧美aⅴ...| 欧美激情在线免费观看| 26uuu国产电影一区二区| 欧美性大战久久久久久久蜜臀| 国产成人精品网址| 国产在线精品视频| 美洲天堂一区二卡三卡四卡视频 | 一区二区三区国产精品| 亚洲国产高清在线观看视频| 久久久精品2019中文字幕之3| 日韩欧美在线一区二区三区| 欧美日韩第一区日日骚| 欧美视频一区二区在线观看| 色久优优欧美色久优优| 91麻豆自制传媒国产之光| k8久久久一区二区三区| av一区二区不卡| 色综合天天综合| 色菇凉天天综合网| 欧美做爰猛烈大尺度电影无法无天| 99久久免费精品| 色哟哟精品一区| 欧美日韩在线播放| 91精品久久久久久久99蜜桃| 91精品免费观看| 日韩精品一区二区三区在线| 欧美成人伊人久久综合网| 精品卡一卡二卡三卡四在线| 久久免费国产精品| 亚洲国产精品精华液2区45| 亚洲欧美在线视频| 亚洲国产中文字幕| 日本va欧美va欧美va精品| 久久草av在线| 日韩免费电影一区| 久久麻豆一区二区| 亚洲日本一区二区| 无吗不卡中文字幕| 国产一区二区三区免费看| 岛国精品在线播放| 91成人免费在线| 日韩免费看网站| 亚洲婷婷国产精品电影人久久| 亚洲国产精品一区二区久久| 美女网站视频久久| av在线播放一区二区三区| 在线成人高清不卡| 国产精品三级久久久久三级| 亚洲午夜视频在线观看| 久久99精品久久久久| 成人网男人的天堂| 欧美一卡2卡3卡4卡| 国产日韩三级在线| 亚洲丶国产丶欧美一区二区三区| 精品无码三级在线观看视频| 国产白丝精品91爽爽久久| 欧美日韩精品专区| 中文字幕不卡在线观看| 亚洲福利电影网| 国产成人高清在线| 日韩一区二区精品葵司在线| 日韩伦理av电影| 久久精品国产免费看久久精品| 成人av免费在线| 91精品国产综合久久久久久久 | 色88888久久久久久影院按摩| 欧美一区二区免费视频| 综合欧美亚洲日本| 国产在线精品免费av| 777a∨成人精品桃花网| 国产精品美女www爽爽爽| 韩国欧美国产一区|