Redis 設計與實現 (七)--事務

K戰神發表於2018-03-09

事務

*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開啟了持久化,那麼事務也會持久化到硬碟。

 

相關文章