1. 程式人生 > >Redis 設計與實現 (七)--事務

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

實現 標識 AC redis 服務 監視 不執行 get 狀態切換

事務

*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-001QUEUED
127.0.0.1:6379
> set sc sc-002QUEUED 127.0.0.1:6379> set sc sc-003QUEUED 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開啟了持久化,那麽事務也會持久化到硬盤。

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