Redis事務裡錯誤對事務的影響
阿新 • • 發佈:2018-11-30
網友寫的 Redis的事務 並沒有對裡面的 case3:全體連坐 和 case4 :冤頭債主(哪個執行失敗就失敗,其他成功就成功) 並沒有解釋兩個區別。其實 Redis Transactions 裡 “Errors inside a transaction” 段落有句 “If there is an error while queueing a command, most clients will abort the transaction discarding it.” 就是對 case 3 最好的解釋,意思是說如果命令在往事務裡排隊的時候就有語法錯誤,客戶端就會直接取消事務。其下文還提到了,自從 2.6.5 版本以後,Redis 能夠記住事務裡排隊的語法錯誤,一旦發現就拒絕執行事務裡的任何命令,也就是取消事務。
Redis Transactions 裡還說到回滾並不能解決程式設計錯誤,所以不提供回滾功能,使用者應當對事務裡的命令負責。對於 Case 4, 就是因為不是語法錯誤,單個命令失敗不影響其他命令的執行,這是和關係型資料庫事務的巨大區別。因此,實際程式設計的時候,使用者需要自己查詢事務裡每個命令執行後的返回結果,如果有錯誤,怎麼進行業務上的“回滾”,執行可逆的操作。