redis Lua實現分布式鎖

2021-09-05 04:51:54 字數 1731 閱讀 3723

1.方法lock(string lock, int expire):獲取鎖

expire,鎖的過期時間

setnx(),只有當lock不存在時才會賦值,賦值成功返回1,賦值失敗返回0

public boolean lock(string lock, int expire) throws exception
2.方法softunlock(string lock):解鎖,只有當鎖過期時才會解鎖

使用lua指令碼script,獲取鎖的狀態以及解鎖,這兩步操作必須為原子性操作

public boolean softunlock(string lock)throws exception
3.方法hardunlock(string lock):解鎖,不關心鎖的是否過期

public boolean hardunlock(string lock) throws exception
4.方法getlockstatus(string lock):獲取鎖的狀態

public boolean getlockstatus(string lock) throws exception
5.方法autoincrlock(string lock):鎖的值自加1,如果鎖本身不存在,預設從0開始

public string autoincrlock(string lock) throws exception ,value={}", lock, value);

return value;

}

6.方法autodecrlock(string lock):鎖的值自減1,如果鎖本身不存在,預設從0開始

public string autodecrlock(string lock) throws exception ,value={}", lock, value);

return value;

}

7.方法softunlockauto(string lock):解鎖,只有當鎖過期時才會解鎖

public boolean softunlockauto(string lock) throws exception
8.方法hardunlockauto(string lock):解鎖,不關心當前鎖的狀態

public boolean hardunlockauto(string lock) throws exception
9.方法string assemblekey(string… section):組裝key

public string assemblekey(string... section) throw exception
10.方法getexpiretime(int expire): 獲取過期時間

private string getexpiretime(int expire) throws exception

redis lua分布式限流

註解反思 我們專案有好幾個介面,呼叫公司中颱的介面,包括定時器的分片執行還有本人的多執行緒強行壓榨,哈哈。最後加上使用者的瘋狂請求,導致中颱的介面偶爾出現問題,主要是資料庫cpu達到100 昨晚專門做了個限流,那麼技術定型使用什麼呢?ratelimiter?這好像是單機才能玩,sentinel?這個...

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...

分布式鎖實現

1,資料庫實現原理 資料庫的行級x鎖。優點 不需要引入第三方應用。缺點 死鎖 對資料庫效能影響,可能較長時間占用資料庫連線資源 如果業務是分庫分表的,可能支援不了 示例 2,快取實現原理 通過setnx是否成功。當且僅當 key 不存在,將 key 的值設為 value 並返回1 若給定的 key ...