分布式鎖Redission分析

Redission鎖總結(jié)

1,加鎖機制

為了實現(xiàn)原子操作,通過執(zhí)行一段Lua腳本進行加鎖。

首先鎖定key, 先判斷key是否已經(jīng)鎖定,未鎖定則通過hset語句進行鎖定

第一步 使用exist判斷key是否存在

第二步 hset 第一個參數(shù)是key,第二個參數(shù)是value,第三個參數(shù)是1 。表示創(chuàng)建一個散列key, field域的值是 1

第三步 設(shè)置key過期時間

第四步 使用hexists判斷散列,field域的值是否為客戶端id

第五步 如果是,則filed域的值加一

第六步 重新設(shè)置key過期時間

2,互斥機制

客戶端2去加鎖,

通過第二條語句判斷,如果散列field域不是客戶端2,則返回pttl剩余的時間

客戶端2會進入一個while循環(huán)

3, watch dog自動延期

一個后臺線程,發(fā)現(xiàn)客戶端1還持有鎖,會不斷延長key的時間

4, 可重入加鎖機制

第四步判斷成功,則會通過hincrby增加域的值

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

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

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,284評論 2 89
  • Redis從入門到精通:中級篇 本文目錄 上一篇文章以認識Redis為主,寫了Redis系列的第一篇,現(xiàn)在開啟第二...
    叨唧唧的閱讀 783評論 0 0
  • 今日售出:0件 仍然還是白板。 倒霉的不止是這些,還有速賣通的規(guī)則讓我下架了兩個還算有流量的產(chǎn)品,今天的流量也比不...
    wiki5201314閱讀 281評論 0 1
  • “如果自己不知道,要過什么樣的人生。幾乎沒有人能夠告訴你要去哪里,要做什么?每個人都有一個屬于自己的路,但是大部分...
    Alice自由自在閱讀 251評論 0 0
  • 你愛我嗎?你愛我哪一點? 這大概是女孩子最喜歡問的問題,也是男孩子最頭疼于回答的問題。 1 我卻從來沒有問過你。 ...
    安夏的花花世界閱讀 551評論 4 4

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