可以一次執行多個命令,本質是一組命令的集合,乙個事務中的所有命令都會序列化,按順序地序列化執行而不會被其他命令插入,不許加塞
乙個佇列中,一次性、順序性、排他性的執行一系列命令
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 業務分析 基於特定條件的事務執行 ...