Redis事務裏錯誤對事務的影響

網友寫的 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, 就是因爲不是語法錯誤,單個命令失敗不影響其他命令的執行,這是和關係型數據庫事務的巨大區別。因此,實際編程的時候,用戶需要自己查詢事務裏每個命令執行後的返回結果,如果有錯誤,怎麼進行業務上的“回滾”,執行可逆的操作。

Errors inside a transaction

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章