redis併發鎖

1.應對併發場景

避免操作數據不一致 將對redis加鎖

2.考慮到異常狀況無法釋放鎖,導致死鎖

將代碼塊進行try-catch處理

3.考慮try時宕機依然導致死鎖

對鎖添加時效性,添加過期時間

4.由於業務代碼塊執行時長不確定,可能導致鎖的永久時效

場景說明:

  當業務1執行時,由於鎖超時而失去了鎖
  這時業務2進來任然繼續執行,
  當業務2在執行時,業務1執行完畢,刪除了業務2的鎖,
  這時業務3進行任然繼續執行
  重複上述步驟則導致鎖的永久實效

解決方案

添加鎖時生成唯一標識,使得業務n只能刪除業務n所加的鎖 

5.考慮到業務1超時,業務2任可繼續執行的情況

可在代碼塊中開一個子線程,動態的更新有效時長-簡稱續命

6.主從問題

場景說明:

當業務1添加鎖時,主表添加了鎖,從表尚未添加鎖,此時主表宕機,從表替換掉主表,此時也會導致鎖失效

解決思路:

在添加鎖時,維護主從的一致性,要麼同時有,要麼同時不存在。

補充

1-5相關框架:redisson


author:monster

since:5/7/2019 12:05:42 PM

direction:redis

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章