Redis 設計與實現 (七) 事務

2022-01-15 01:16:21 字數 1134 閱讀 7497

事務

*acid,指資料庫事務正確執行的四個基本要素的縮寫。包含:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)

redis 通過multi  exec  watch 實現事務

一、事務開始-- mulit

mulit 標誌事務開始,將客戶端從非事務狀態切換到事務狀態

# redis-cli

127.0.0.1:6379>multi

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

Redis設計與實現(四) 事務

redis也提供事務機制來滿足acid性質。事務的整個過程會經歷三個階段 事務開始 multi命令標誌著事務的開始。命令入隊 如果客戶端傳送的是exec discard watch multi四個命令,那麼就會立即執行,其他的命令只會放入事務佇列中等待執行。事務執行 當伺服器接收到了exec命令之後...

Redis 設計與實現

本書的目標是以簡明易懂的方式講解 redis 的內部執行機制,通過閱讀本書,你可以了解到 redis 從資料結構到伺服器構造在內的幾乎所有知識。為了保證內容的簡潔性,本書會盡量以高抽象層次的角度來觀察 redis 並將 的細節留給讀者自己去考究。如果讀者只是對 redis 的內部運作機制感興趣,但並...

redis設計與實現

物件所使用的底層資料結構 編碼常量 object encoding 命令輸出 整數redis encoding int int embstr編碼的簡單動態字串 sds redis encoding embstr embstr 簡單動態字串 redis encoding raw raw 字典redis...