事務
*ACID,指資料庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、永續性(Durability)
redis 通過multi exec watch 實現事務
- 事務開始
- 命令入隊
- 事務執行
一、事務開始-- mulit
mulit 標誌事務開始,將客戶端從非事務狀態切換到事務狀態
# redis-cli 127.0.0.1:6379> multi OK 127.0.0.1:6379> set sc 'sc-001'QUEUED 127.0.0.1:6379> set sc 'sc-002'QUEUED 127.0.0.1:6379> set sc 'sc-003'QUEUED 127.0.0.1:6379> get scQUEUED 127.0.0.1:6379> exec 1) OK 2) OK 3) OK 4) "sc-003" 127.0.0.1:6379>
二、命令入隊
客戶端-非事務狀態:輸入的命令立即執行
客戶端-事務狀態:輸入命令exec discard watch mulit 會立即執行,其他不立即執行,而將命令入隊等待執行。
三、事務執行--exec
exec 命令 執行事務。遍歷事務命令佇列,執行所有命令返回客戶端。
四、watch命令
樂觀鎖 -- exec執行前,監視的鍵只要有修改,拒絕執行事務。返回客戶端空回覆
修改命令執行後會將客戶端的REDIS_DIRTY_CAS標識開啟,標誌客戶端的事務安全性被破壞。
五、Redis事務ACID性質
1、原子性,要不都執行,要不都不執行。redis不支援回滾機制。
2、一致性,因為redis對錯誤命令不執行,所以資料庫可以避免沒有非法或者無效資料。
入隊錯誤、執行錯誤、伺服器停機
3、隔離性,redis是單執行緒方式執行事務,事務有隔離性。
4、耐久性,redis開啟了持久化,那麼事務也會持久化到硬碟。