Redis 事務閱讀簡記

2021-09-07 05:29:23 字數 1805 閱讀 8963

注:文章大部分摘自《redis開發與運維》 部分內容源自自己理解,請讀者 「按需獲取」 

一、事務相關概念介紹

1、資料庫事務定義:

資料庫事務(database transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。

事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。

通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。

乙個邏輯工作單元要成為事務,必須滿足所謂的acid(原子性、一致性、隔離性和永續性)屬性。

事務是資料庫執行中的邏輯工作單位,由dbms中的事務管理子系統負責事務的處理。

2、acid定義:

acid,指資料庫事務正確執行的四個基本要素的縮寫。

包含:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)。

乙個支援事務(transaction)的資料庫,必須要具有這四種特性,否則在事務過程(transaction processing)

當中無法保證資料的正確性,交易過程極可能達不到交易方的要求。

3、redis對事務的支援定義:

為了保證多條命令組合的原子性,redis提供了「簡單的事務功能」

之所以說它簡單,主要是因為它不支援事務中的回滾特性,同時無法實現命令之間的邏輯關係計算

二、redis對事務的支援

1、redis2.6以前:redis通過提供multi、exec、discard等原生命令來支援簡單事務操作

2、redis2.6以後:redis提供了lua指令碼外掛程式,通過lua指令碼同樣可以實現「事務」的相關功能(一次lua指令碼的執行在redis服務端是一次原子操作)

3、redis在lua指令碼的「協助」下,通過客戶端自己編寫lua指令碼、組織邏輯,可以做到完全的事物(需要客戶端自己實現)

三、lua指令碼在redis中的作用

1、拓展redis命令,幫助開發者定製自己的redis命令

2、「順帶」提供客戶自己實現「事務」的途徑(注:此處並不是redis提供事物支援)

四、redis與lua

在redis中執行lua指令碼有兩種方法:eval和evalsha

1、eval命令:redis提供eval命令來執行lua指令碼內容,每次執行時redis客戶端會把指令碼作為字串傳送給服務端,服務端會將執行結果返回給客戶端

2、evalsha命令:redis還提供evalsha命令來執行lua指令碼。該命令執行時,redis客戶端首先要將lua指令碼載入到redis服務端,得到該指令碼的sha1校驗和,evalsha命令使用sha1作為引數可以直接執行對應lua指令碼,避免每次傳送lua指令碼的開銷。這樣客戶端就不需要每次執行指令碼內容,而指令碼也會常駐在服務端,指令碼功能得到了復用。

五、lua指令碼保證redis服務端事務操作的侷限性

1、由於每次指令碼執行都只能將指令碼命令傳送到乙個redis server(即乙個redis node)上,所以當對集群操作時,一次lua指令碼需要保證裡面的key都在乙個node上,

當key分散在不同的node上時,lua指令碼即會執行失敗。(該點可以通過增加hash_tag解決掉)

2、使用lua指令碼實現的事務,需要客戶端自行設計、編碼

六、lua指令碼功能為redis開發和運維人員帶來的好處:

1、lua指令碼在redis中是原子執行的,執行過程中間不會插入其他命令。

2、lua指令碼可以幫助開發和運維人員創造出自己定製的命令,並可以將這些命令常駐在redis記憶體中,實現復用的效果。

3、lua指令碼可以將多條命令一次性打包,有效地減少網路開銷。

事務隔離的簡記

一 概念 事務隔離 由資料庫系統實現,是資料庫系統本身的乙個功能。在資料庫操作中,為了有效保證併發讀取資料的正確性,提出了事務隔離級別的概念 為了解決更新丟失,髒讀,不可重讀 包括虛讀和幻讀 等問題,在標準sql規範中,定義了4個事務隔離級別 由低到高 1 未授權讀取,也稱為讀未提交 read un...

Mobx 原始碼閱讀簡記

整體會寫得比較亂,同時也比較簡單,和讀書筆記差不多,基本是邊讀邊寫。見諒 主要三大部分atom observable derivation mobx的原子類,能夠被觀察和通知變化,observablevalue繼承於atom。observablevalue atom 同時裡面有幾個比較重要的屬性與方...

Mobx 原始碼閱讀簡記

整體會寫得比較亂,同時也比較簡單,和讀書筆記差不多,基本是邊讀邊寫。見諒 主要三大部分atom observable derivation mobx的原子類,能夠被觀察和通知變化,observablevalue繼承於atom。observablevalue atom 同時裡面有幾個比較重要的屬性與方...