1. 程式人生 > >用mysql實現分散式鎖

用mysql實現分散式鎖

       考慮這樣一個場景: 多臺機器同時執行某一任務,要求某一時刻最多隻有一臺機器執行, 該怎麼搞呢? 可以考慮分散式鎖。

       思路:在mysql中插入一條記錄,表明獲取鎖。刪除一條記錄,表明釋放鎖。 且在mysql表中設定一個unique key欄位, 當有一臺機器獲得鎖後, 其他機器無法獲取。

       

 

       有幾個問題:

        1.  如果一臺機器獲得鎖,在釋放鎖之前程序掛了, 那麼其他機器無法獲取到鎖。 可以引入鎖有效時間的概念,超時後,刪除記錄,釋放鎖。

        2.  萬一獲取鎖的操作失敗了,就直接做錯誤處理, 也不太好。 可以引入迴圈重試的方式來解決,控制重試次數。

 

        實際程式碼中就是這麼搞的, 用起來還比較爽。