Redis 分布式鎖

2022-06-04 20:09:18 字數 623 閱讀 8714

1. 解決領域

位於不同 jvm 下的執行緒之間 , 不能使用  synchronized

那麼  同一時間就可能對同乙個資源進行訪問 , 造成狀態不一致.

比如 a , b買東西 ,  買 資源菠蘿,只有乙個 ,兩個執行緒同時讀到剩餘  1  個庫存 ,然後同時下單  .造成超賣

這個時候用乙個統一能訪問到的資源 , redis  , 如果a要買 ,買的時候 ,

在redis裡面加乙個 

setnx 菠蘿  a在買 ,就意味著a占有這個菠蘿,

正在進行操作 

其他人就進不去.  因為此時的 菠蘿是有 狀態的

除非a操作完 , 然後b才能買 ,

這樣做就不用去給資料庫加鎖 , 而把訪問併發問題移交給redis , 讓它來控制誰來訪問資源

有先後順序.

(我們需要控制a買的操作時間 , 另外,也要設定鎖的過期時間 , 防止a出現問題 ,

沒有及時交出 鎖 , 造成菠蘿這個資源一直處於被鎖定之中

redis分布式鎖

redis分布式鎖 直接上 我寫了四個redis分布式鎖的方法,大家可以提個意見 第一種方法 redis分布式鎖 param timeout public void lock long timeout thread.sleep 100 catch exception e override publi...

Redis分布式鎖

分布式鎖一般有三種實現方式 1.資料庫樂觀鎖 2.基於redis的分布式鎖 3.基於zookeeper的分布式鎖.首先,為了確保分布式鎖可用,我們至少要確保鎖的實現同時滿足以下四個條件 互斥性。在任意時刻,只有乙個客戶端能持有鎖。不會發生死鎖。即使有乙個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保...

redis分布式鎖

使用redis的setnx命令實現分布式鎖 redis為單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,且多個客戶端對redis的連線並不存在競爭關係。redis的setnx命令可以方便的實現分布式鎖。setnx key value 將key的值設為value,當且僅當key不存在。如給定的...