鎖是一種安全機制。是對數據可靠性的保護。java
之前在單機部署模式的時候,經常使用java lock 。如今微服務的分佈式。部署到不一樣的機器上的服務須要經過中間件進行加鎖。redis
最簡單的模擬的場景是,兩個臺機子(或者兩個服務)執行定時任務。本意是:這個定時任務只要執行一次就好。結果兩個都執行了。安全
解決方案:分佈式
利用redis做爲中間件,實現分佈式鎖。考慮到可能中途出錯,沒法釋放鎖的問題。微服務
引用老錢的話spa
爲了治理這個亂象,Redis 2.8 版本中做者加入了 set 指令的擴展參數,使得 setnx 和 expire 指令能夠一塊兒執行,完全解決了分佈式鎖的亂象。今後之後全部的第三方分佈式鎖 library 能夠休息了。code
> set lock:codehole true ex 5 nx OK ... do something critical ... > del lock:codehole
上面這個指令就是 setnx 和 expire 組合在一塊兒的原子指令,它就是分佈式鎖的奧義所在。... https://juejin.im 掘金 — 一個幫助開發者成長的社區中間件