基于Redis實現(xiàn)分布式鎖的思路大概是這樣的:在redis中設(shè)置一個值表示加了鎖躺同,然后釋放鎖的時候就把這個key刪除矩动。
具體代碼是這樣的:
如果要解決以上鎖永久失效(A線程把B線程的鎖刪了)的問題的話刽肠,可以給每個線程加個唯一標(biāo)識。
如下圖:
但是又還有一個問題鎖永久失效(A線程沒有在過期時間內(nèi)執(zhí)行完嘉冒,導(dǎo)致B線程可以進(jìn)來獲取鎖)涩禀。
此時可以用以下方式解決:
在A線程設(shè)置完鎖之后疯搅,馬上開啟分線程,定時去查詢這個A線程的鎖是否過期了埋泵,如果沒有過期則重新設(shè)置為30秒。定時循環(huán)時間為30*1/3≈10類似這樣子罪治。(真正實現(xiàn)這個邏輯是比較麻煩的丽声,其實redission就可以解決這個問題,也是redission的看門狗觉义,watchdog)
注意:不推薦用這種方式雁社!請看下一篇文章