如何合理的控制鎖的有效時長,根據業務執行時間預估由于網絡等原因存在不确定性。是以應該根據監控業務執行來動态的給鎖續期,可以使用redisson實作的分布式鎖,也是基于setnx指令實作的,加了看門狗來動态續期:
執行個體代碼如下:其中如果不加鎖自動釋放時間參數,則會預設使用看門狗給鎖自動續期。
redisson實作的分布式鎖是可重入的,即在同一個線程裡同一個key,可以擷取多次鎖,如下:
注意如下:redis主從複制中,主節點用于寫操作,從節點用于讀操作,當在擷取鎖時,主節點當機了,從節點會自動更新為主節點,此時其他線程從新的主節點擷取相同的鎖,此時無法實作主從資料一緻問題,redisson無法解決,可以用紅鎖解決,但是性能太低。如果非要保證資料的強一緻性,就采用zookeeper實作的分布式鎖。