Redis學習 事務處理基礎

2021-10-25 01:22:29 字數 1440 閱讀 7853

1.什麼是事務?

簡單來說,事務是一組命令的集合,乙個事務中的所有命令要麼全部執行,要麼全不執行。

redis保證乙個事務中的所有命令要麼都執行,要麼都不執行,它還能保證乙個事務內的命令依次執行而不被其他命令插入。

簡單使用如下:

multi告訴redis:下面我給你發的命令屬於同一事務,先不要執行,存起來。redis返回ok。

exec告訴redis:我發完了,你可以執行之前儲存的命令了

注意:如果在傳送exec命令前客戶端斷線了,則redis會清空所有事務佇列,事務中的所有命令都不會執行,如果在傳送exec命令後斷線,所有命令都會被執行。

2.事務錯誤處理

事務錯誤可分為兩類:

1)語法錯誤:語法錯誤指命令不存在或者命令引數的個數不對。

當發生語法錯誤時,執行exec命令後redis就會直接返回錯誤,連語法正確的命令也不會執行。

2)執行錯誤:在命令執行時出現的錯誤,比如使用雜湊型別的命令操作集合型別的鍵,這種錯誤在實際執行之前redis是無法發現的。

如果事務裡的一條命令出現了執行錯誤,事務裡的其他命令依然會被執行(包括出錯命令之後的命令)。

注意:redis的事務沒有提供回滾功能(rollback),為此開發者必須事先在事務執行出錯後自己將資料庫復原回事務執行之前的狀態。

3.watch命令介紹

我們已經知道在乙個事務中只有當所有命令都執行完後才能得到每個結果的返回值,可是在有些情況下我們需要先獲得一條命令的值後才能進行下一條命令。

為了解決這個問題我們需要watch:watch命令可以監控乙個或多個鍵,一旦其中有乙個鍵在事務之前被修改,之後的事務就不會執行,監控一直持續到exec命令

執行exec命令會取消對所有鍵的監控,如果不想執行事務中的命令來取消監控,也可以使用unwatch命令來取消監控。

注意:由於watch命令的作用只是被監控的鍵值被修改後阻止之後乙個事務的執行,而不能保證其他客戶端不修改這一鍵值,所以我們需要在exec執行失敗後重新執行整個函式。

redis事務處理

資料acid特性滿足了幾條?為了保持簡單,redis事務保證了其中的一致性和隔離性 不滿足原子性和永續性 redis事務在執行的中途遇到錯誤,不會回滾,而是繼續執行後續命令 違反原子性 事務可以理解為乙個打包的批量執行指令碼,但批量指令並非原子化的操作 中間某條指令的失敗不會導致前面已做指令的回滾,...

redis事務處理

1 multi命令用於開啟乙個事務,它總是返回ok multi執行之後,客戶端可以繼續向伺服器傳送任意多條命令,這些命令不會立即被執行,而是被放到乙個佇列中 2 exec命令被呼叫時,所有佇列中的命令才會被執行 multi ok incr foo queued set t1 1 queued exe...

Redis 事務處理

眾所周知,事務是指 乙個完整的動作,要麼全部執行,要麼什麼也沒有做 在聊 redis 事務處理之前,要先和大家介紹四個redis指令,即multi exec discard watch。這四個指令構成了redis事務處理的基礎。呼叫 exec 之前的錯誤 語法錯誤 呼叫exec之前的錯誤 有可能是由...