高併發場景下鎖的使用技巧
但是,即使解決了原子性的問題,業務上同樣會遇到一些極端的問題,比如分散式環境下,A獲取到了鎖之後,因為執行緒A的業務程式碼耗時過長,導致鎖的超時時間,鎖自動失效...
但是,即使解決了原子性的問題,業務上同樣會遇到一些極端的問題,比如分散式環境下,A獲取到了鎖之後,因為執行緒A的業務程式碼耗時過長,導致鎖的超時時間,鎖自動失效...
高併發場景,外面不斷有請求過來訪問介面第2個請求就可以加鎖成功,因為第一個請求的鎖被redis清除掉了,假設新來的請求執行時間為8s第1個請求此時執行了10s,再執行5s,刪除之前的key,會刪除第二個執行緒的key,刪鎖操作超高併發過程中...
但是這種實現方式把加鎖和設定過期時間的步驟分成兩步,他們並不是原子操作,如果加鎖成功之後程式崩潰、服務宕機等異常情況,導致沒有設定過期時間,那麼就會導致死鎖的問題,其他執行緒永遠都無法獲取這個鎖...