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增加域的值