Redis 交易
MULTI, EXEC, DISCARD and WATCH 是Redis交易的基礎。用來明確開啟並控制一個事務,它們允許在一個步驟中執行一組命令。並提供兩個重要的保證:
● 事務中的所有命令都會被序列化並依序執行。在執行Redis事務的過程中,不會出現由另一個客戶端發出的請求。這保證 命令佇列 作為一個單獨的原子操作被執行。
● 佇列中的指令要麼全部被處理,要麼全部被忽略。 EXEC指令觸發交易中所有指令的執行,因此,當客戶端在事務情境中失去與伺服器的連接,
● 如果發生在呼叫MULTI指令之前,則不執行任何commands;
● 如果在此之前EXEC指令被調用,則所有的commands都被執行。
同時,redis使用AOF(append-only file),使用額外的write操作將交易寫入磁碟。如果發生宕機,進程奔潰等情況,可以使用redis-check-aof tool 修復append-only file,使服務正常啟動,並恢復部分操作。 (推薦:《Redis影片教學》)
用法
#使用MULTI指令明確開啟Redis交易。該命令總是以OK回應。此時使用者可以發出多個命令,Redis不會執行這些命令,而是將它們排隊。 EXEC被呼叫後,所有的指令都會被執行。而呼叫DISCARD可以清除事務中的commands佇列並退出事務。
以下範例以原子方式,遞增鍵foo和bar。
>MULTI OK >INCR foo QUEUED >INCR bar QUEUED >EXEC 1)(整数)1 2)(整数)1
從上面的命令執行中可以看出,EXEC傳回一個數組,其中每個元素都是事務中單一命令的回傳結果,而且順序與命令的發出順序相同。
當Redis連線處於MULTI請求的上下文中時,所有命令將以字串QUEUED(從Redis協定的角度作為狀態回復發送)作為回复,並在命令佇列中排隊。只有EXEC被呼叫時,排隊的命令才會被執行,此時才會有真正的回傳結果。
以上是redis事務有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!