redis使用setnx命令創建鎖,失效時間我設置多長時間為好?如何設置的失效時間太短,方法沒等執行完,鎖就自動釋放了,那么就會產生并發問題。如果設置的時間太長,其他獲取鎖的線程就可能要平白的多等一段時間。在只考慮單機redis的情況下,如何處理這個問題?
2 回答

LEATH
TA貢獻1936條經驗 獲得超7個贊
可以預估一下你的業務請求時長,通常都在50-100ms之間,你的失效時間可以設置到100ms,如果更高你可以設置到1s,在redis防重的下一步就是數據庫防重,數據庫防重一定是要做的,所以就算redis鎖失效,數據庫肯定能防住。

慕神8447489
TA貢獻1780條經驗 獲得超1個贊
不知道我現在救火還來不來得及。
不要使用 setnx 來創建一個可過期的鎖,請使用 set key value nx ex time (SET 文檔地址)來創建。這樣能確保 setnx 和 expire 結合為一個原子操作。
如果先 setnx 再 expire,這個操作不是原子的,可能引發新的問題。比如 setnx 之后程序異常崩潰了,導致該 key 永不過期,從而引起其他請求鎖的線程一直阻塞。
希望現在救火還來得及。
添加回答
舉報
0/150
提交
取消