亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于redis實現分布式鎖的問題?

關于redis實現分布式鎖的問題?

斯蒂芬大帝 2018-07-04 14:06:12
redis使用setnx命令創建鎖,失效時間我設置多長時間為好?如何設置的失效時間太短,方法沒等執行完,鎖就自動釋放了,那么就會產生并發問題。如果設置的時間太長,其他獲取鎖的線程就可能要平白的多等一段時間。在只考慮單機redis的情況下,如何處理這個問題?
查看完整描述

2 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

可以預估一下你的業務請求時長,通常都在50-100ms之間,你的失效時間可以設置到100ms,如果更高你可以設置到1s,在redis防重的下一步就是數據庫防重,數據庫防重一定是要做的,所以就算redis鎖失效,數據庫肯定能防住。

查看完整回答
反對 回復 2018-07-20
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

不知道我現在救火還來不來得及。

不要使用 setnx 來創建一個可過期的鎖,請使用 set key value nx ex time (SET 文檔地址)來創建。這樣能確保 setnx 和 expire 結合為一個原子操作。

如果先 setnx 再 expire,這個操作不是原子的,可能引發新的問題。比如 setnx 之后程序異常崩潰了,導致該 key 永不過期,從而引起其他請求鎖的線程一直阻塞。

希望現在救火還來得及。


查看完整回答
反對 回復 2018-07-20
  • 2 回答
  • 1 關注
  • 1927 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號