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

主頁 > 知識庫 > PHP+redis實現的悲觀鎖機制示例

PHP+redis實現的悲觀鎖機制示例

熱門標簽:寶安400電話辦理 電銷機器人-快迭智能 哈爾濱400電話辦理到易號網 合肥外呼系統app 智能外呼電銷系統 高識別電銷機器人 沈陽人工智能電銷機器人公司 拉薩打電話機器人 h5 地圖標注

本文實例講述了PHP+redis實現的悲觀鎖。分享給大家供大家參考,具體如下:

鎖機制

通常使用的鎖分為樂觀鎖,悲觀鎖這兩種,簡單介紹下這兩種鎖,作為本文的背景知識,對這類知識已經有足夠了解的同學可以跳過這部分。

樂觀鎖

先來看下百度百科上的解釋:大多是基于數據版本( Version )記錄機制實現。何謂數據版本?即為數據增加一個版本標識,在基于數據庫表的版本解決方案中,一般是通過為數據庫表增加一個 “version” 字段來實現。讀取出數據時,將此版本號一同讀出,之后更新時,對此版本號加一。此時,將提交數據的版本數據與數據庫表對應記錄的當前版本信息進行比對,如果提交的數據版本號大于數據庫表當前版本號,則予以更新,否則認為是過期數據。

其實說白了,就是好比一個健身房里只有一臺跑步機,在健身房門口有個排號機,每個進健身房的人都得先領一個號碼才能進入,如果跑步機上有人,則在一邊做做熱身、喝喝水,如果跑步機上沒人,則確認跑步機上當前顯示的號碼(上一個用過跑步機的人的號碼)是否比自己手持的小,如果小,則可以使用;否則,就意味著過號,而過號在現實中我們的都知道要么走,要么重排,就是不能插隊,在系統中也是一樣的,通常是返回錯誤。

悲觀鎖

同樣,來看下百度百科的解釋:具有強烈的獨占和排他特性。它指的是對數據被外界(包括本系統當前的其他事務,以及來自外部系統的事務處理)修改持保守態度,因此,在整個數據處理過程中,將數據處于鎖定狀態。悲觀鎖的實現,往往依靠數據庫提供的鎖機制(也只有數據庫層提供的鎖機制才能真正保證數據訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無法保證外部系統不會修改數據)。

然后,也同樣通俗的解釋下,還是那個健身房。這次在門口不需要排號機了,而是掛著把鑰匙(只有一把),想進去的人必須拿到這把鑰匙才行,拿到鑰匙的人可以進入,不管是熱身、喝水還是跑步都可以,直到他出來把鑰匙掛回墻上,下一個才能去爭取,拿到的才可以再進去。聽著好像有點不人性化,所以悲觀鎖比較適合強一致性的場景,但效率比較低,特別是讀的并發低。樂觀鎖則適用于讀多寫少,并發沖突少的場景。

背景

先說下,本文的開發背景,方便大家了解為什么要使用悲觀鎖以及文中鎖的詳細設計。

任務分發系統:任務池(mysql)中存在大量任務(文章),現在需要用戶協助編輯,系統基本需求如下(簡化版):

1、推送用戶感興趣的分類下的任務到用戶編輯器中;
2、用戶編輯提交一個任務后,自動推送下一個任務;
3、每次只分配一個任務給用戶;
4、如果一個用戶占有某任務超過一定時間,則自動釋放任務,任務進任務池,重新循環;
5、……

目標

目標有兩個:

1、一個任務在同一時間段內只能被一個用戶所持有;

2、避免出現死任務,即避免任務被用戶長時間占有,無法釋放。

思路

由于系統并發量較大,并且有頻繁的寫操作,所以選擇悲觀鎖來控制每個任務只能同時被一個用戶領取。主要思路如下:

1、從任務池中找出一部分可分配的任務;
2、根據一定順序,選擇一個任務,作為候選推送任務;
3、嘗試對候選推送任務加鎖;
4、如果加鎖成功,則推送任務給用戶,并修改對應的任務狀態和用戶狀態;
5、如果加鎖失敗,則任務已被領取,重復2-5,直到推送成功。

實現

這里只介紹下鎖的實現機制,其余業務邏輯略過。由于加鎖過程應該是不可拆解的,也就是常說的原子型操作,因此這里選擇redis中的setnx操作作為加鎖的方法。

簡化版的代碼如下:

function lock($strMutex, $intTimeout) {
  $objRedis = new Redis();
  //使用setnx原子型操作加鎖
  $intRet  = $objRedis->setnx($strMutex, 1);
  if ($intRet) {
    //設置過期時間,防止死任務的出現
    $objRedis->expire($strMutex, $intTimeout);
    return true;
  }
  return false;
}

這段代碼有個問題,就是setnx成功,但expire失敗,這就可能存在死任務的情況。解決這個問題的一種通用方法是通過使用incr方法代替setnx,具體如下:

function lock($strMutex, $intTimeout, $intMaxTimes = 0) {
  $objRedis = new Redis();
  //使用incr原子型操作加鎖
  $intRet  = $objRedis->incr($strMutex);
  if ($intRet === 1) {
    //設置過期時間,防止死任務的出現
    $objRedis->expire($strMutex, $intTimeout);
    return true;
  }
  if ($intMaxTimes > 0  $intRet >= $intMaxTimes  $objRedis->ttl($strMutex) === -1) {
    //當設置了最大加鎖次數時,如果嘗試加鎖次數大于最大加鎖次數并且無過期時間則強制解鎖
    $objRedis->del($strMutex);
  }
  return false;
}

這段代碼通過$intMaxTimes來保證即使在expire未成功的時候也能強制解鎖,保證系統不會出現死任務。

還有沒有更好的方法呢?

其實redis中的set操作已兼容了setnx,并且支持設置過期時間。

function lock($strMutex, $intTimeout) {
  $objRedis = new Redis();
  //使用setnx操作加鎖,同時設置過期時間
  $strRet  = $objRedis->set($strMutex, 1, 'ex', $intTimeout, 'nx');
  if ($strRet === 'OK') {
    return true;
  }
  return false;
}

這個方法是我認為目前最好的,但是為什么沒有直接介紹這個方法,而是先介紹incr那個方法呢?其實細心的同學可以看到上面那個方面有兩個加粗的字”通用“。之所以這么說是因為set方法是從redis2.6.12版本才開始支持多參數的。

水平有限,歡迎指正~

參考資料:http://redisdoc.com/string/set.html

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php+redis數據庫程序設計技巧總結》、《php面向對象程序設計入門教程》、《PHP基本語法入門教程》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • Java使用Redisson分布式鎖實現原理
  • 基于Redis的分布式鎖的簡單實現方法
  • Redis Template實現分布式鎖的實例代碼
  • 如何利用Redis鎖解決高并發問題詳解
  • Python實現的redis分布式鎖功能示例
  • PHP實現Redis單據鎖以及防止并發重復寫入
  • java基于jedisLock—redis分布式鎖實現示例代碼
  • Java編程redisson實現分布式鎖代碼示例
  • redis實現加鎖的幾種方法示例詳解
  • redis鎖機制介紹與實例

標簽:威海 巴中 山東 成都 林芝 梅州 泰州 張家口

巨人網絡通訊聲明:本文標題《PHP+redis實現的悲觀鎖機制示例》,本文關鍵詞  PHP+redis,實現,的,悲觀,鎖,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP+redis實現的悲觀鎖機制示例》相關的同類信息!
  • 本頁收集關于PHP+redis實現的悲觀鎖機制示例的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产夜色精品一区二区av| 成人美女在线观看| 亚洲午夜在线观看视频在线| 国产精品久久99| 国产三级精品三级在线专区| 国产亚洲精品免费| 中文字幕一区二区三区色视频| 中文字幕的久久| 国产精品国产三级国产aⅴ入口 | 91精品国产综合久久福利软件 | 久久99日本精品| 久久国产尿小便嘘嘘尿| 国产美女一区二区三区| 成人性生交大片免费看视频在线| 成人aa视频在线观看| 欧美最新大片在线看| 日韩一区二区三| 久久久99精品免费观看| 亚洲欧洲日韩在线| 日韩国产高清影视| 国产黑丝在线一区二区三区| www.综合网.com| 欧美伦理影视网| 国产偷国产偷亚洲高清人白洁 | 亚洲图片激情小说| 亚洲国产日韩a在线播放性色| 五月天亚洲精品| 国产综合色在线| 一本到三区不卡视频| 欧美日韩性生活| 欧美经典三级视频一区二区三区| 国产精品白丝在线| 免播放器亚洲一区| 91尤物视频在线观看| 日韩欧美123| 亚洲国产视频一区二区| 国产高清久久久| 91精品久久久久久久99蜜桃 | 国产成人综合视频| 欧美色视频在线| 国产精品美女久久久久aⅴ| 日日欢夜夜爽一区| 97精品国产露脸对白| 久久综合九色综合97婷婷女人| 一区二区三区精品在线观看| 激情六月婷婷久久| 欧美一区二区三区四区视频| 亚洲欧美日韩国产另类专区| 国产传媒日韩欧美成人| 日韩欧美二区三区| 午夜精品久久久久| 色婷婷久久综合| 中文字幕中文乱码欧美一区二区| 老司机免费视频一区二区| 色吧成人激情小说| 亚洲人成影院在线观看| 丁香一区二区三区| 国产片一区二区| 九九九久久久精品| 日韩欧美综合在线| 美女视频一区二区| 欧美日韩高清一区二区三区| 亚洲综合色区另类av| 在线国产亚洲欧美| 一区二区三区四区精品在线视频| 成人精品免费网站| 中文字幕中文在线不卡住| 国产精品69久久久久水密桃| 国产色爱av资源综合区| 国产乱子伦一区二区三区国色天香| 日韩一区二区三区免费看| 日本三级韩国三级欧美三级| 日韩精品在线看片z| 国产在线国偷精品免费看| 久久久久国产成人精品亚洲午夜 | 91视频精品在这里| 国产精品久久久久影视| 成人精品国产福利| 亚洲色图欧洲色图| 欧美视频一区二区| 日韩经典一区二区| 精品成人a区在线观看| 国产毛片精品视频| 国产精品第13页| 欧美四级电影网| 日本v片在线高清不卡在线观看| 欧美一区二区三区四区视频| 美国毛片一区二区| 中文字幕不卡在线观看| 色婷婷综合在线| 日韩在线卡一卡二| 久久精品亚洲精品国产欧美| 91小视频在线| 日本美女一区二区三区视频| 久久久精品国产99久久精品芒果| www.亚洲免费av| 蜜臀久久久久久久| 国产精品国产a| 在线电影国产精品| 懂色av一区二区三区蜜臀| 亚洲午夜免费视频| 精品国产99国产精品| 91久久精品日日躁夜夜躁欧美| 日韩中文字幕亚洲一区二区va在线| 日韩免费电影网站| 日本韩国欧美一区二区三区| 麻豆成人91精品二区三区| 亚洲欧洲成人精品av97| 欧美一区日本一区韩国一区| 不卡的看片网站| 久久66热re国产| 亚洲高清在线精品| 中文字幕av一区 二区| 91精品国产一区二区三区蜜臀| 国产寡妇亲子伦一区二区| 天堂在线亚洲视频| 日韩理论在线观看| 国产视频在线观看一区二区三区 | 久久99精品一区二区三区三区| 成人免费在线视频| 日韩亚洲电影在线| 欧美裸体一区二区三区| 99久久精品国产一区二区三区| 老司机精品视频线观看86| 亚洲综合区在线| 国产精品国产三级国产普通话三级| 制服丝袜亚洲色图| 欧美午夜精品电影| 一本一道波多野结衣一区二区| 激情小说欧美图片| 久久99蜜桃精品| 日本vs亚洲vs韩国一区三区二区| 一区二区三区鲁丝不卡| 亚洲欧美日韩中文播放| 亚洲国产经典视频| 国产色产综合色产在线视频| xvideos.蜜桃一区二区| 欧美一级生活片| 7777精品伊人久久久大香线蕉完整版 | 国产尤物一区二区在线| 蜜臀99久久精品久久久久久软件| 亚洲一卡二卡三卡四卡无卡久久| 亚洲欧美另类图片小说| 中文字幕一区不卡| 一区在线中文字幕| 国产精品对白交换视频| 国产清纯在线一区二区www| 久久网站热最新地址| 国产午夜精品理论片a级大结局| 精品999久久久| 久久亚洲欧美国产精品乐播| 欧美sm美女调教| 欧美成人一区二区三区片免费| 91精品国产综合久久久久| 日韩午夜精品视频| 久久综合资源网| 中文欧美字幕免费| 亚洲图片激情小说| 亚瑟在线精品视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 久热成人在线视频| 丁香婷婷综合色啪| 一本到高清视频免费精品| 欧美视频精品在线观看| 欧美一级二级在线观看| 久久一夜天堂av一区二区三区| 欧美韩日一区二区三区四区| 国产精品美女久久久久av爽李琼| 一区二区三区四区蜜桃| 美日韩一级片在线观看| 大胆欧美人体老妇| 欧美精品久久天天躁| 久久这里只有精品首页| 亚洲欧美日韩国产成人精品影院 | 伊人开心综合网| 视频在线在亚洲| 国产中文字幕一区| 91福利国产精品| 精品国产乱码久久久久久老虎| 国产欧美日韩麻豆91| 亚洲国产一区二区视频| 韩国v欧美v日本v亚洲v| 91免费版pro下载短视频| 欧美一三区三区四区免费在线看| 国产亚洲精品7777| 热久久一区二区| 99久久99精品久久久久久 | 欧美日韩免费不卡视频一区二区三区 | 91丨九色丨蝌蚪富婆spa| 欧美日韩一二区| 国产精品高潮呻吟| 国产做a爰片久久毛片| 欧美日韩国产色站一区二区三区| 久久欧美中文字幕| 日本不卡在线视频| 色视频一区二区| 国产精品福利影院| 国产suv精品一区二区6| 欧美一级日韩免费不卡| 亚洲成人免费观看|