1. 程式人生 > 實用技巧 >組合語言-17直接定址表

組合語言-17直接定址表

Redis通過MULTI、EXEC、WATCH等命令來實現事務(transaction)功能。

事務階段

一個事務會經歷三個階段:事務開始、命令入隊、事務執行

事務開始

MULTI將客戶端從非事務狀態切換到事務狀態,通過將客戶端的Flags屬性REDIS_MULTI開啟實現的。

命令入隊

在這裡插入圖片描述
每個客戶端都有自己的事務狀態,儲存在RedisClient物件的mstate中

在這裡插入圖片描述

事務執行

當一個處於事務的客戶端執行EXEC的時候,服務端會遍歷客戶端的事務佇列,遍歷執行,然後把結果返回給客戶端。

Watch命令的實現

Watch是一個樂觀鎖,當一個鍵被監視之後,就會放入watched_keys字典中,字典的鍵是watch的鍵,值是監視的客戶端。

當有資料庫進行修改的命令時,會通過touchWatchKey函式將被修改的客戶端的REDIS_DIRTY_CAS標識開啟,標識客戶端的安全性已經破壞。

當執行EXEC的時候,判斷是否是否安全,如下
在這裡插入圖片描述

事務的ACID

原子性

Redis事務不支援回滾機制,出現命令錯誤的時候(非命令入隊錯誤),也會執行下面的操作,所以本質上來說並不具備隔離性

隔離性

Redis是以單執行緒方式執行的,所以具備天然的事務隔離。

一致性

一致性是指系統從一個正確的狀態,遷移到另一個正確的狀態

永續性

當伺服器執行在AOF持久化模式下,並且appendfsync選項的值為always時,事務也具有耐久性。