Redis|事務

文章目錄

    • 是什么
    • 能干嘛
    • Redis 事務 VS 數據庫事務
    • 怎么玩
    • 小總結

是什么

  • 首先回想一下什么是數據庫的事務?數據庫事務是指作為單個邏輯單元執行的一系列操作,具備以下四個關鍵特性(ACID):

    • 原子性(Atomicity):事務中的所有操作要么全部完成,要么全部不完成,不存在部分執行的情況。如果中途出錯,已執行的操作會回滾,確保數據一致性。
    • 一致性(Consistency):事務執行前后,數據庫必須保持一致性狀態,即符合預定義的規則和約束。
    • 隔離性(Isolation):多個事務并發執行時,彼此互不干擾,每個事務都像是在獨立運行。數據庫通過鎖機制或多版本控制來實現隔離性。
    • 持久性(Durability):事務一旦提交,其結果將永久保存在數據庫中,即使系統故障也不會丟失。
  • 事務的狀態:

    • 活動(Active):事務正在執行。
    • 部分提交(Partially Committed):操作執行完畢,但未最終提交。
    • 提交(Committed):事務成功完成,結果永久保存。
    • 失敗(Failed):無法繼續執行。
    • 中止(Aborted):事務回滾,數據庫恢復到事務開始前的狀態。
  • 官網:https://redis.io/docs/manual/transactions/

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

在這里插入圖片描述

能干嘛

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

Redis 事務 VS 數據庫事務

對比詳細解釋
單獨的隔離操作Redis的事務僅僅是保證事務里的操作會被連續獨占的執行,redis命令執行是單線程架構,在執行完事務內所有指令前是不可能再去同時執行其他客戶端的請求的
沒有隔離級別的概念因為事務提交前任何指令都不會被實際執行,也就不存在”事務內的查詢要看到事務里的更新,在事務外查詢不能看到”這種問題了
不保證原子性Redis的事務不保證原子性(部分支持),也就是不保證所有指令同時成功或同時失敗,只有決定是否開始執行全部指令的能力,沒有執行到一半進行回滾的能力
排它性Redis會保證一個事務內的命令依次執行,而不會被其它命令插入

怎么玩

  • 官網 :https://redis.io/docs/manual/transactions/

在這里插入圖片描述

  • 常用命令

在這里插入圖片描述

  • case1:正常執行 MULTIEXEC
    在這里插入圖片描述

  • case2:放棄事務 MULTIDISCARD在這里插入圖片描述

  • case3:全體連坐,一個語法出錯,全體連坐。如果任何一個命令語法有錯,Redis 會直接返回錯誤,所有的命令都不會執行在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

  • case4:源頭債主在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

  • 注意和傳統數據庫事務的區別,不一定要么全部成功要么全部失敗

  • case5:watch監控

    • Redis使用 Watch 來提供樂觀鎖定,類似于 CAS(Check-and-Set)
      1. 悲觀鎖:悲觀鎖(Pessimistic Lock),顧名思義,就是很悲觀,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會block直到它拿到鎖。
      2. 樂觀鎖:樂觀鎖(Optimistic Lock),顧名思義,就是很樂觀,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據。
        • 樂觀鎖策略:提交版本必須【大于】記錄當前版本才能執行更新
        • 與悲觀鎖不同,樂觀鎖不會在操作前加鎖,而是在提交修改時檢查數據是否被其他客戶端修改過。如果數據未被修改,則提交成功;否則,操作失敗,客戶端可以選擇重試或放棄。
      3. CAS在這里插入圖片描述
    • watch
      • 初始化 k1 和 balance 兩個 key,先監控在開啟 multi,保證兩個 key 變動在同一個事務內在這里插入圖片描述在這里插入圖片描述

      • 有加塞篡改:watch 命令是一種樂觀鎖的實現,Redis 在修改的時候會檢測數據是否被更改,如果被更改了,則執行失敗在這里插入圖片描述

    • unwatch在這里插入圖片描述
  • 小結:

    • 一旦執行了 exec 之前加的監控鎖都會被取消掉
    • 當客戶端連接丟失的時候(比如退出鏈接),所有東西都會被取消監視

小總結

  • 開啟:以 multi 開始一個事務
  • 入隊:將多個命令入隊到事務中,接到這些命令并不會立即執行,而是放到等待執行的事務隊列里面
  • 執行:有 exec 命令觸發事務

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70775.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70775.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一周學會Flask3 Python Web開發-Jinja2模板繼承和include標簽使用

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程: 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 不管是開發網站還是后臺管理系統,我們頁面里多多少少有公共的模塊。比如博客網站,就有公共的頭部&…

二十三種設計模式詳解

二十三種設計模式是軟件開發中用于解決常見問題的經典解決方案,它們由 Erich Gamma 等四位作者在《設計模式:可復用面向對象軟件的基礎》一書中提出。這些模式分為三大類:創建型模式、結構型模式 和 行為型模式。 1. 創建型模式(…

用pyside6創建一個界面并實現一個小功能且能打包成問題記錄

現在我們要開發一個程序,讓用戶輸入一段文本包含:員工姓名、薪資、年齡。該程序可以把薪資在 2萬 以上、以下的人員名單分別打印出來。 1用designer創建界面并生成UI文件; 2直接調用ui文件實現功能; from PySide6.QtWidgets im…

計算機畢業設計 ——jspssm510springboot 的人職匹配推薦系統

作者:程序媛9688 開發技術:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 🌟文末獲取源碼數據庫🌟 感興趣的可以先收藏起來,還有大家在畢設選題(免費咨詢指導選題)&#xf…

包子湊數——藍橋杯真題Python

包子湊數 輸入輸出樣例 示例 1 輸入 2 4 5輸出 6樣例說明 湊不出的數目包括:1, 2, 3, 6, 7, 11。 示例 2 輸入 2 4 6輸出 INF樣例說明 所有奇數都湊不出來,所以有無限多個 運行限制 最大運行時間:1s最大運行內存: 256M 最大公約數 最大公…

SSM和SpringBoot有什么區別?

SSM(Spring、Spring MVC、MyBatis)和 Spring Boot 有以下一些區別: 配置方式 SSM:配置相對繁瑣,需要在多個 XML 文件中進行大量的配置。Spring Boot:采用“約定大于配置”的原則,極大地簡化了配…

極簡Python服務器后端

在Python中,可以使用http.server模塊和json模塊來創建一個簡單的HTTP服務器,該服務器可以響應80端口上的/query POST請求,并且請求體為JSON格式。 需要注意,在Linux系統上,使用低于1024的端口(如80端口&…

文檔檢索服務平臺

文檔檢索服務平臺是基于Elasticsearch的全文檢索,包含數據采集、數據清洗、數據轉換、數據檢索等模塊。 項目地址:Github、國內Gitee 演示地址:http://silianpan.cn/gdss/ 以下是演示角色和賬號(密碼同賬號)&#xf…

關于Postman自動獲取token

在使用postman測試聯調接口時,可能每個接口都需要使用此接口生成的令牌做Authorization的Bearer Token驗證,最直接的辦法可能會是一步一步的點擊,如下圖: 在Authorization中去選擇Bearer Token,然后將獲取到的token粘貼…

清華大學DeepSeek文檔下載,清華大學deepseek下載(完成版下載)

文章目錄 前言一、清華大學DeepSeek使用手冊下載二、清華大學DeepSeek使用手冊思維導圖 前言 這是一篇關于清華大學deepseek使用手冊pdf的介紹性文章,主要介紹了DeepSeek的定義、功能、使用方法以及如何通過提示語設計優化AI性能。以下是對這些核心內容的簡要概述&…

Linux:(3)

一:Linux和Linux互傳(壓縮包) scp:Linux scp 命令用于 Linux 之間復制文件和目錄。 scp 是 secure copy 的縮寫, scp 是 linux 系統下基于 ssh 登陸進行安全的遠程文件拷貝命令。 scp 是加密的,rcp 是不加密的,scp 是…

【新人系列】Python 入門專欄合集

? 個人博客:https://blog.csdn.net/Newin2020?typeblog 📝 專欄地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 專欄定位:為 0 基礎剛入門 Python 的小伙伴提供詳細的講解,也歡迎大佬們…

Arcgis 實用制圖技巧--如何制作“陰影”效果

今天給大家介紹arcgis中陰影效果的制作方法,操作很簡單,在ArcMap當中使用制圖表達和移動幾何方式就可以輕松實現。 左側地圖的圖形背景組織很差。右側地圖通過使用陰影效果突出了重點內容。今天,我將要介紹兩種陰影效果的創建方法:第一,純色陰影(single color);第二,漸變…

pandas如何在dataframe上再添加一個dataframe

在pandas中,通常將一個DataFrame與另一個DataFrame進行合并或連接操作,主要有concat函數、merge函數和join方法三種方式,以下是具體介紹: ### 使用concat函數 concat函數可以沿著指定軸將多個DataFrame連接在一起,默認…

YOLOv12 ——基于卷積神經網絡的快速推理速度與注意力機制帶來的增強性能結合

概述 實時目標檢測對于許多實際應用來說已經變得至關重要,而Ultralytics公司開發的YOLO(You Only Look Once,只看一次)系列一直是最先進的模型系列,在速度和準確性之間提供了穩健的平衡。注意力機制的低效阻礙了它們在…

OpenAI開放Deep Research權限,AI智能體大戰升級,DeepSeek與Claude迎來新對決

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

鴻蒙5.0實戰案例:基于RichEditor的評論編輯

往期推文全新看點(文中附帶全新鴻蒙5.0全棧學習筆錄) ?? 鴻蒙(HarmonyOS)北向開發知識點記錄~ ?? 鴻蒙(OpenHarmony)南向開發保姆級知識點匯總~ ?? 鴻蒙應用開發與鴻蒙系統開發哪個更有前景&#…

通過命令啟動steam的游戲

1. 啟動Steam客戶端 在命令行輸入以下命令來啟動Steam客戶端: start steam://open/main 如果Steam未安裝在默認路徑,可能需要先定位到Steam的安裝目錄,例如: cd C:\Program Files (x86)\Steam start steam://open/main 2. 通過…

RIP-AV:使用上下文感知網絡進行視網膜動脈/靜脈分割的聯合代表性實例預訓練

文章目錄 RIP-AV: Joint Representative Instance Pre-training with Context Aware Network for Retinal Artery/Vein Segmentation摘要方法實驗結果 RIP-AV: Joint Representative Instance Pre-training with Context Aware Network for Retinal Artery/Vein Segmentation …

單片機總結【GPIO/TIM/IIC/SPI/UART】

一、GPIO 1、概念 通用輸入輸出口;開發者可以根據自己的需求將其配置為輸入或輸出模式,以實現與外部設備進行數據交互、控制外部設備等功能。簡單來說,GPIO 就像是計算機或微控制器與外部世界溝通的 “橋梁”。 2、工作模式 工作模式性質特…