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

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

有大佬遇到過這個問題嗎:Redis原子性問題

有大佬遇到過這個問題嗎:Redis原子性問題

慕勒3428872 2019-09-19 11:59:51
在高并發時候Llen多人會獲取到相同的值比如秒殺時候庫存10個通過llen
查看完整描述

2 回答

?
吃雞游戲

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

你是通過lpush添加數據,然后llen<10來判斷是否超賣?原子性是對redis命令來說的,并沒有說redis多個命令還是原子性啊,redis原子性這個話術本來就有問題。lpop沒問題是lpop是獲取加移出,你事先把固定數量的貨品lpush入隊列,根據redis命令串行執行這個特點,lpop當然不會超賣,因為可以pop的數據項是一定的。但是如果你用llen來判斷,命令之間是串行執行但不是原子的,例如,llen和lpop由兩個實例同時發出,server端先執行llen再執行lpop,那么根據llen的返回做出的決策是有問題的,會導致超賣所以你沒有理解一個本質:命令原子性、redisserver執行串行化、多實例client可以并發請求redis
                            
查看完整回答
反對 回復 2019-09-19
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

列一個場景:A調用Llen返回1B調用Llen返回1
B先扣除并提交A也扣除并提交
這種場景就不能避免超賣,因為在取出長度的時候是原子,但是取出后的操作會繼續扣除的。
                            
查看完整回答
反對 回復 2019-09-19
  • 2 回答
  • 0 關注
  • 403 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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