Redis事務介紹

2021-10-02 23:56:20 字數 1234 閱讀 4296

可以一次執行多個命令,本質是一組命令的集合,乙個事務中的所有命令都會序列化,按順序地序列化執行而不會被其他命令插入,不許加塞

乙個佇列中,一次性、順序性、排他性的執行一系列命令

redis常用命令:

1.discard:取消事務,放棄執行事務塊內的所有命令

2.exec:執行所有事務塊內的命令

3.multi:標記乙個事務塊的開始

4.unwatch:取消watch命令對所有key的監視

5.watch key [key…]:監視乙個或多個key,如果在事務執行之前這個(些)key被其他命令所改動,那麼事務被打斷

表鎖:進行操作時,鎖住整張表,併發性差,但一致性好

行鎖:進行操作時,只所操作的那一條資料,併發性較高,但一致性較差

悲觀鎖:

顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖

樂觀鎖顧名思義,就是很樂觀,每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料,可以使用版本號等機制。樂觀鎖適用於多讀的應用型別,這樣可以提高吞吐量。

樂觀鎖策略:提交版本必須大於記錄當前版本才能執行更新

關係型資料庫一般都用悲觀鎖,redis使用樂觀鎖。

watch指令,類似樂觀鎖,事務提交時,如果key的值已被別的客戶端改變,比如某個list已被別的客戶端push/pop過了,整個事務佇列都不會執行

通過watch命令在事務執行之前監控了多個key,倘若在watch之後有任何key的值發生了變化,exec命令執行的事務都將被放棄,同時返回nullmulti-bulk應答以通知呼叫者事務執行失敗

事務的錯誤處理:

開啟:以multi開啟乙個事務

入隊:將多個命令入隊到事務中,接到這些命令並不會立即執行,而是放到等待執行的事務佇列裡面

執行:由exec命令觸發事務

1.單獨的隔離操作:事務中的所有命令都會序列化,按順序的執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。

2.沒有隔離級別的概念:佇列中的命令沒有提交之前都不會實際的被執行,因為事務提交前任何指令都不會被實際執行,也就不存在「事務內的查詢要看到事務裡的更新,在事務外查詢不能看到」這個問題。

3.不保證原子性:redis同乙個事務中如果有一條命令執行失敗,其後的命令仍然會被執行,沒有回滾。

redis事務介紹

目錄 redis 事務 redis事務回滾問題 redis 事務命令 redis 事務可以一次執行多個命令,並且帶有以下兩個重要的保證 乙個事務從開始到執行會經歷以下三個階段 單個 redis 命令的執行是原子性的,但 redis 沒有在事務上增加任何維持原子性的機制,所以 redis 事務的執行並...

Redis 事務與過期時間詳細介紹

redis 事務與過期時間詳細介紹 一 redis事務 redis中支援事務,事務即為當我們需要執行幾條命令時,要麼這幾條命令都不執行,要麼都執行 1 開始事務寫入 multi 2 然後寫入命令,注意寫完事務要執行的每條命令之後回車即可,命令會自動入隊 lpush art 1 hello lpush...

Redis事務 事務鎖

一旦成功所有的成功,乙個失敗,所有一些列連續動作都失敗 事務的基本操作 注意 加入事務的命令暫時到任務佇列中,並沒有立即執行,只有執行exec命令才開始執行事務定義過程中發現問題,怎麼辦?discard 事務的工作流程 事務的注意事項 手動進行事務回滾 業務場景1 業務分析 基於特定條件的事務執行 ...