1. 程式人生 > 實用技巧 >Redis事務

Redis事務

Redis中的事務是一組命令的集合。一個事務中的命令要麼都執行,要麼都不執行。事務在執行期間,伺服器不會中斷事務而去執行其它客戶端的命令請求,它會將事務中的所有命令都執行完,然後才去處理其它客戶端的命令請求。

1.multi——開啟事務

通過multi命令開啟事務,它總是返回OK。MULTI執行之後,客戶端可以繼續向伺服器傳送任意多條命令,這些命令不會立即被執行,而是被放到一個佇列中,當 EXEC命令被呼叫時, 所有佇列中的命令才會被執行。

2.命令入佇列

之後所有的命令都會放入事務佇列中,並不會立刻執行。

如果客戶端傳送的命令為EXEC,DISCARD,WATCH,MULTI四個命令中的其中一個,伺服器會立刻執行這個命令。

對於這四個命令以外的其它命令,伺服器並不會立刻執行,而是將這個命令放入一個事務佇列中,然後向客戶端返回QUEUED回覆。

3.exec——執行事務

當客戶端向伺服器傳送EXEC命令時,會立刻執行。

伺服器會遍歷這個客戶端的事務佇列,執行佇列中儲存的所有命令,最後將執行命令所得的結果全部返回給客戶端。

4.DISCARD——放棄執行

當執行 DISCARD 命令時, 事務會被放棄, 事務佇列會被清空,並且客戶端會從事務狀態中退出。

watch命令

watch命令是一個樂觀鎖,可以為Redis事務提供 check-and-set (CAS)行為。它可以在EXEC命令執行前監視任意數量的鍵(key),在執行EXEC命令時,檢查被監視的鍵是否已經被修改過,一旦發現被監視的鍵至少有一個被修改,伺服器將拒絕執行事務,並向客戶端返回代表事務執行失敗的空回覆(nil-reply)。

執行EXEC命令後會取消對所有鍵的監控,如果不想執行事務中的命令可以使用UNWATCH命令來取消監控。