思路:
使用redis的特性setnx key value 如果不存在就設置 key 和value,操作完成後del key 刪除key ,讓下一個線程去獲取這個key
設置好了以後當第二個線程去 setnx的時候,會返回錯誤,保證redis數據同時只能被一個線程訪問
SET key value [EX seconds] [PX milliseconds] [NX|XX]
setnx 有個問題,如果在操作過程中程序崩潰,則會變成死鎖,所以添加一個超時設置
set name 123 ex 20 nx
設置name123 超時爲 20 秒, nx表示 如果key不存在就執行set, xx表示 如果key存在就執行set
但是同樣這個也會存在一個問題 ,就是如果超時時間內用戶沒有操作完成,key會自動過期,還是會產生數據不安全
redis的watch特性
watch key 就是觀察一個key,如果key被修改則redis事務操作失敗
watch name;
multi
set name 20
exec
這是exec會操作失敗,
不管不是在本線程操作,或者其他線程操作,如果key的值被更改事務執行就會失敗