1、multi命令用於開啟乙個事務,它總是返回ok
multi執行之後,客戶端可以繼續向伺服器傳送任意多條命令,這些命令不會立即被執行,而是被放到乙個佇列中
2、exec命令被呼叫時,所有佇列中的命令才會被執行
>multi
//ok
>incr foo
//queued
>set t1 1
//queued
>exec
//2//ok
使用事務時可能會遇上以下兩種錯誤:
1.事務在執行exec之前,入隊的命令可能會出錯,比如產生語法錯誤,記憶體不足。。。
2.命令可能在exec呼叫之後失敗,比如事務中的命令可能處理了錯誤型別的鍵(列表命令用在了字串鍵上面)
第一種錯誤的情況:
伺服器端:
2.6.5以前,redis只執行事務中那些入隊成功的命令,而忽略那些入隊失敗的命令
2.6.5以後,伺服器會對入隊失敗的情況進行記錄,並在客戶端呼叫exec命令時,拒絕執行並自動放棄這個事務
第二種錯誤:
即使事務中有某些命令在執行時產生了錯誤,事務中的其他命令仍然會繼續執行
3、discard
事務會被放棄,事務佇列會被清空,並且客戶端會從事務狀態中退出
4、watch
可以為redis事務提供cas行為,被watch的鍵會被監視,並會發覺這些鍵是否被改動過。如果有至少乙個被監視的鍵在exec執行之前被修改,那麼整個事務都會被取消
redis事務處理
資料acid特性滿足了幾條?為了保持簡單,redis事務保證了其中的一致性和隔離性 不滿足原子性和永續性 redis事務在執行的中途遇到錯誤,不會回滾,而是繼續執行後續命令 違反原子性 事務可以理解為乙個打包的批量執行指令碼,但批量指令並非原子化的操作 中間某條指令的失敗不會導致前面已做指令的回滾,...
Redis 事務處理
眾所周知,事務是指 乙個完整的動作,要麼全部執行,要麼什麼也沒有做 在聊 redis 事務處理之前,要先和大家介紹四個redis指令,即multi exec discard watch。這四個指令構成了redis事務處理的基礎。呼叫 exec 之前的錯誤 語法錯誤 呼叫exec之前的錯誤 有可能是由...
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 ...