redis之六 事務和watch
阿新 • • 發佈:2018-11-19
redis中文官網:redis事務[中文]
redis的事務和watch
redis是單執行緒的,所以在redis中所有命令都是原子操作。而當要多條redis命令同時執行而不被打斷時,則需要使用redis的事務了。
redis中的事務是用以下4個命令來實現的:
- MULTI
- EXEC
- DISCARD
- WATCH
MULTI命令
用於開啟一個事務,它總是返回OK。MULTI執行之後,客戶端可以繼續向伺服器傳送任意多條命令, 這些命令不會立即被執行,而是被放到一個佇列中
,當 EXEC命令被呼叫時, 所有佇列中的命令才會被執行。
EXEC命令
負責觸發並執行事務中的所有命令:
如果客戶端成功開啟事務後執行EXEC,那麼事務中的所有命令都會被執行。
如果客戶端在使用MULTI開啟了事務後,卻因為斷線而沒有成功執行EXEC,那麼事務中的所有命令都不會被執行。
需要特別注意的是:即使事務中有某條/某些命令執行失敗了,事務佇列中的其他命令仍然會繼續執行——Redis不會停止執行事務中的命令,而不會像我們通常使用的關係型資料庫一樣進行回滾。
DISCARD命令
當執行 DISCARD 命令時, 事務會被放棄, 事務佇列會被清空,並且客戶端會從事務狀態中退出。
WATCH 命令
可以為Redis事務提供 check-and-set (CAS)行為。被WATCH的鍵會被監視,並會發覺這些鍵是否被改動過了。 如果有至少一個被監視的鍵在 EXEC 執行之前被修改了, 那麼整個事務都會被取消, EXEC 返回nil-reply來表示事務已經失敗。