眾所周知,事務是指 「乙個完整的動作,要麼全部執行,要麼什麼也沒有做」。
在聊 redis 事務處理之前,要先和大家介紹四個redis指令,即multi、exec、discard、watch。這四個指令構成了redis事務處理的基礎。
呼叫 exec 之前的錯誤(語法錯誤)
「呼叫exec之前的錯誤」,有可能是由於語法有誤導致的,也可能時由於記憶體不足導致的。只要出現某個命令無法成功寫入緩衝佇列的情況,redis 都會進行記錄,在客戶端呼叫 exec 時,redis會拒絕執行這一事務,事務會回滾。
呼叫 exec 之後的錯誤(資料型別錯誤)
而對於「呼叫exec之後的錯誤」,redis則採取了完全不同的策略,即 redis 不會理睬這些錯誤,而是繼續向下執行事務中的其他命令。這是因為,對於應用層面的錯誤,並不是redis自身需要考慮和處理的問題,所以乙個事務中如果某一條命令執行失敗,並不會影響接下來的其他命令的執行,事務不會回滾。
discard 命令用於取消事務,放棄執行事務塊內的所有命令。
watch本身的作用是「監視key是否被改動過」,而且支援同時監視多個key,只要還沒真正觸發事務,watch都會盡職盡責的監視,一旦發現某個key被修改了,在執行exec時就會返回nil,表示事務無法觸發。
redis事務處理
資料acid特性滿足了幾條?為了保持簡單,redis事務保證了其中的一致性和隔離性 不滿足原子性和永續性 redis事務在執行的中途遇到錯誤,不會回滾,而是繼續執行後續命令 違反原子性 事務可以理解為乙個打包的批量執行指令碼,但批量指令並非原子化的操作 中間某條指令的失敗不會導致前面已做指令的回滾,...
redis事務處理
1 multi命令用於開啟乙個事務,它總是返回ok multi執行之後,客戶端可以繼續向伺服器傳送任意多條命令,這些命令不會立即被執行,而是被放到乙個佇列中 2 exec命令被呼叫時,所有佇列中的命令才會被執行 multi ok incr foo queued set t1 1 queued exe...
Redis的事務處理
multi 開啟事務 exec 提交事務 discard取消事務 127.0 0.1 6379 multi ok127.0 0.1 6379 set djkfdjs queued 127.0 0.1 6379 set djklg djgl queued 127.0 0.1 6379 discard ...