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