redis事務的本質是一組命令的集合。事務支援一次執行多個命令,乙個事務中所有命令都會被序列化。在事務執行過程中,會按照順序序列化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。
總結來說:redis事務就是一次性、順序性、排他性的執行乙個佇列中的一系列命令。
批量操作在傳送exec命令前被放入佇列快取,並不會被實際執行,也就不存在事務內的查詢要看到事務裡的更新,事務外查詢不能看到。
redis中,單條命令是原子性執行的,但事務不保證原子性,且沒有回滾。事務中任意命令執行失敗,其餘的命令仍然會被執行。
例項:
以multi開始乙個事務,然後將多個命令入隊到事務中,最後由exec命令觸發事務,一併執行事務中的所有命令:
redis 127.0.0.1:6379> multi
okredis 127.0.0.1:6379> set book-name "mastering c++ in 21 days"
queued
redis 127.0.0.1:6379> get book-name
queued
redis 127.0.0.1:6379> sadd tag "c++" "programming" "mastering series"
queued
redis 127.0.0.1:6379> smembers tag
queued
redis 127.0.0.1:6379> exec
1) ok
2) "mastering c++ in 21 days"
3) (integer) 3
4) 1) "mastering series"
2) "c++"
3) "programming"
單個redis命令的執行是原子性的,但是redis沒有在事務上增加任何維持原子性的機制,所以redis事務的執行並不是原子性的。事務可以理解為乙個打包的批量執行指令碼,但批量指令並非原子化的操作,中間某條指令的失敗不會導致前面已經做過的指令的回滾,也不會造成後續指令不做。
序號命令
命令描述
1discard
取消事務,放棄執行事務塊內的所有命令
2exec
執行所有事務塊內的命令
3multi
標記乙個事務塊的開始
4unwatch
取消watch命令對所有key的監視
5watch key [key...]
監視乙個或多個key,如果在事務執行之前這些key被其他命令所改動,那麼事務將被打斷
redis學習之redis事務
redis的事務可以一次執行多個命令,本質是一組命令的集合。乙個事務中所有的命令都會被序列化,按順序序列執行且不會被其它命令插入。redis的事務分為3個階段,分別是開始事務 命令入隊 執行事務。multi 標記乙個事務塊的開始 exec 執行事務塊內的所有命令 discard 取消事務,放棄執行事...
Redis 原始碼學習之 Redis 事務Nosql
redis事務提供了一種將多個命令請求打包,然後一次性 按照順序地執行多個命令的機制,並且在事務執行的期間,伺服器不會中斷事務而去執行其他不在事務中的命令請求,它會把事務中所有的命令都執行完畢才會去執行其他的命令。howredis中提供了multi discard exec watch unwatc...
Redis學習筆記 Redis事務
redis事務可以一次執行多個命令 按順序地序列執行,執行中不會被其他命令插入,不許加塞 1.簡介 redis事務可以一次執行多個命令 允許在一次單獨的步驟中執行一組命令 特徵 1 批量操作在傳送exec命令前被放入佇列快取 2 收到exec命令後進入事務執行,事務中任意命令執行失敗,其餘的命令依然...