1. 程式人生 > >redis應用-分布式鎖

redis應用-分布式鎖

保存狀態 重新 修改用戶 行修改 存在 key 過期 超時 之間

一個操作要修改用戶的狀態,修改狀態需要先讀出用戶的狀態,在內存裏進行修改,改完了再存回去。如果這樣的操作同時進行了,就會出現並發問題,因為讀取和保存狀態這兩個操作不是原子的。

set lock:codehole true ex 5 nx

5秒之內持有鎖,ex:超時時間 nx:當key不存在時創建

Redis 的分布式鎖不能解決超時問題,如果在加鎖和釋放鎖之間的邏輯執行的太長,以至於超出了鎖的超時限制,就會出現問題。因為這時候鎖過期了,第二個線程重新持有了這把鎖,但是緊接著第一個線程執行完了業務邏輯,就把鎖給釋放了,第三個線程就會在第二個線程邏輯執行完之間拿到了鎖。

為了避免這個問題,Redis 分布式鎖不要用於較長時間的任務。

redis應用-分布式鎖