redis的事務可以一次執行多個命令,本質是一組命令的集合。乙個事務中所有的命令都會被序列化,按順序序列執行且不會被其它命令插入。redis的事務分為3個階段,分別是開始事務、命令入隊、執行事務。
multi:標記乙個事務塊的開始;
exec:執行事務塊內的所有命令;
discard:取消事務,放棄執行事務內的所有命令;
redis事務如果在執行exec命令之前出現錯誤,伺服器會對入隊失敗的命令進行記錄,並在客戶端呼叫exec命令執行事務的時候,拒絕執行並自動放棄這個事務。如果是在執行exec命令之後出現的錯誤,redis不會進行處理,事務會繼續執行不會回滾,只有發生錯誤的命令不會執行成功,其它命令都會執行成功。
下面給出乙個例子:
正常情況下,應該是這樣的
如果在執行exec前出現了錯誤,可以看到redis拒絕執行這個事務。
如果在執行exec命令之後發生了錯誤,可以看到redis執行了事務,但是錯誤的命令沒有執行,其它的的兩個命令正常執行了。
取消事務例子,取消事務後其中的命令不會被執行。
watch:監視乙個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷,watch命令為redis事務提供cas行為,如果至少乙個被監視的鍵在exec執行之前被修改了,那麼整個事務都會被取消。
unwatch:取消watch命令對所有key的監視;
watch命令舉例
在執行exec命令前,開啟另乙個視窗,改變name的值,再執行exec命令,可以看到事務被取消了,獲取name的值可以看到是在另一視窗中設定的值。
redis事務
redis學習之redis事務
redis事務的本質是一組命令的集合。事務支援一次執行多個命令,乙個事務中所有命令都會被序列化。在事務執行過程中,會按照順序序列化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。總結來說 redis事務就是一次性 順序性 排他性的執行乙個佇列中的一系列命令。批量操作在傳送ex...
Redis 原始碼學習之 Redis 事務Nosql
redis事務提供了一種將多個命令請求打包,然後一次性 按照順序地執行多個命令的機制,並且在事務執行的期間,伺服器不會中斷事務而去執行其他不在事務中的命令請求,它會把事務中所有的命令都執行完畢才會去執行其他的命令。howredis中提供了multi discard exec watch unwatc...
Redis學習筆記 Redis事務
redis事務可以一次執行多個命令 按順序地序列執行,執行中不會被其他命令插入,不許加塞 1.簡介 redis事務可以一次執行多個命令 允許在一次單獨的步驟中執行一組命令 特徵 1 批量操作在傳送exec命令前被放入佇列快取 2 收到exec命令後進入事務執行,事務中任意命令執行失敗,其餘的命令依然...