尚硅谷redis7 47-48 redis事務之理論簡介

47 redis事務之理論簡介

什么是事務

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

能干什么?

一個隊列中,一次性、順序性、排他性的執行一系列操作

redis事務vs數據庫事務

1 單獨的隔離操作

????????Redis的事務僅僅是保證事務里的操作會被連續獨占的執行,redis命令執行是單線程架構,在執行完事務內所有指令前是不可能再去同時執行其他客戶端的請求的

2 沒有隔離級別的概念

????????因為事務提交前任何指令都不會被實際執行【只是放在隊列里面不會執行】,也就不存在“事務內的查詢要看到事務里的更新,在事務外查詢不能看到”這種問題了

3不保證原子性

????????Redis的事務不保證原子性,也就是不保證所有指令同時成功或同時失敗,只有決定是否開始執行全部指令的能力,沒有執行到一半進行回滾的能力

4 排它性

????????Redis會保證一個事務內的命令依次執行,而不會被其它命令插入

48 redis事務之案例實操

Redis 事務是通過 MULTI 命令進入的。該命令始終返回 OK。此時,用戶可以發送多個命令,但 Redis 不會立即執行這些命令,而是將它們排入隊列中。所有命令會在調用 EXEC 命令后一次性執行。

如果調用 DISCARD 命令,則會清空事務隊列并退出事務

redis事務命令

1.DISCARD? ? ? ? 取消事務→放棄執行事務塊內的所有命令。

2.EXEC????????執行所有事務塊內的參令。

3.MULTI????????標記一個事務塊的開始。

4.UNWATCH????????取消WATCH 命令對所有key的監視,

5.WATCH key [key .. ]????????監視一個(或多個)key,如果在事勞執行之前這個(或這些)key被其他命令所改動,那么事務將被打斷。

CASE1:正常執行

MULTI 和?EXEC

CASE2:放棄事務

MULTI 和?DISCARD

CASE3:全體連坐

一條命令出錯,就全部放棄執行

127.0. 0.1:6379> MULTI
OK
127. 0. 0. 1: 6379(TX)> set k1 v111
QUEUED
127.0. 0. 1: 6379( TX)> set k2 v222
QUEUED
127.0.0.1:6379(TX)> set k3? ?// 這個命令本身就是錯誤的
(error) ERR wrong number of arguments for 'set' command
127. 0. 0. 1: 6379( TX) >
127. 0. 0. 1: 6379( TX) > EXEC
EXECABORT Transaction discarded because of previous errors.? //事務隊列中的所有命令都不執行

事務中的錯誤

在事務過程中,可能會遇到兩類命令錯誤:

  1. 命令在排隊階段失敗:也就是說,在調用 EXEC 之前就發生了錯誤。例如,命令可能存在語法錯誤(參數數量錯誤、命令名稱錯誤等),或者遇到某些關鍵問題,如內存不足(例如服務器配置了 maxmemory 指令設置了內存上限)。

    1. 這種情況只能全部命令都放棄執行

  2. 命令在 EXEC 后執行時失敗:例如,對某個鍵執行了不適用的操作(比如對一個字符串類型的鍵執行列表操作)。

CASE4:冤頭債主

在執行 EXEC 之后發生的錯誤不會被特殊處理:即使事務中的某個命令執行失敗,其他命令仍然會被繼續執行。

總結:對的放行,錯的不執行

補充:redis不提供事務回滾的功能,開發者必須在事務執行出錯后,自行恢復數據庫狀態。

INCR email命令錯誤:郵箱是字符串不可能自增

CASE5:watch監控

redis的watch類似于樂觀鎖的設定,類似于CAS

悲觀鎖是一種假設“總會發生沖突”的鎖機制。假設每次訪問數據都是對數據進行修改。因此在對數據進行操作前,會先加鎖,防止其他線程同時訪問,以確保數據安全。

樂觀鎖假設“并發沖突是少數”,所以不加鎖。 假設每次訪問數據都不會修改數據。因此在更新數據時才校驗數據是否被其他線程修改。

CAS 是一種無鎖的原子操作,全稱是 比較并交換。它是樂觀鎖的具體實現方式之一,底層依賴于 CPU 的原子指令。

工作原理:

  • 先讀取變量的舊值

  • 和預期值進行比較

  • 如果相等,則更新為新值

  • 如果不等,說明有其他線程修改過,則重試或失敗

watch

初始化k1和balance兩個key,先監控再開啟multi,保證兩key變動在同一個事務內

127. 0. 0. 1:6379> set k1 abc
OK
127. 0. 0. 1: 6379> set balance 100
OK
127. 0. 0. 1:6379>
127. 0. 0. 1: 6379> WATCH balance
OK
127.0. 0.1:6379>
127. 0. 0. 1: 6379> MULTI
OK
127. 0. 0. 1: 6379( TX) > set k1 abc2
QUEUED
127. 0. 0. 1: 6379( TX) > set balance 110
QUEUED
127. 0. 0. 1: 6379( TX) > EXEC
1) OK
2) OK
127.0. 0. 1:6379> get k1
"abc2"

有加塞篡改:

????????客戶端1監控了balance

????????客戶端2修改了balance

????????客戶端1的事務執行失敗返回空

unwatch

UNWATCH 用于 取消之前通過 WATCH 命令監視的所有鍵,避免這些鍵的變動影響事務的執行。

  • 在你使用 WATCH 命令監控某些鍵的變化時,如果你不再想基于這些鍵判斷是否執行事務,就可以用 UNWATCH 來取消。

  • 如果你調用了 DISCARD,Redis 會自動 UNWATCH,無需手動取消。

WATCH mykey
GET mykey
UNWATCH ? ? ? # 取消監視
MULTI
SET mykey "newvalue"
EXEC

小結

一旦執行了exec之前加的監控鎖都會被去掉。

當客戶端連接丟失【比如退出連接】,所有東西都會被取消監視

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

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

相關文章

Nginx 在四大核心場景中的應用實踐與優化

一、Nginx 核心應用場景深度解析 1. HTTP 服務器:靜態資源的高性能承載者 Nginx 作為 HTTP 服務器時,憑借輕量級架構和高效的事件驅動模型,成為靜態資源服務的首選方案。 核心能力與場景 靜態文件高效處理:直接響應 HTML、CSS…

亞當·斯密思想精髓的數學建模與形式化表征

亞當斯密思想精髓的數學建模與形式化表征 摘要:本文運用數學建模方法對亞當斯密的經濟與倫理思想進行形式化表征。通過分工的規模經濟模型和市場均衡條件展現《國富論》中"看不見的手"原理;采用擴展效用函數與合作博弈均衡解釋《道德情操論》…

FastDFS集群部署與性能優化實戰

目錄 一、介紹 二、FastDFS原理 三、FastDFS部署 1.資源清單 2.修改主機名 3.安裝libfastcommon(tracker01、tracker02、storage1、storage2) 4.安裝編譯FastDFS(tracker01、tracker02、storage1、storage2) 5.配置tracker…

學習心得(14--16)

模板: 前端的頁面單獨存在模板當中 jinja2 :模板語法 保持前端頁面不變的情況下,返回內容給前端做法: 寫一個data,并在return中的render_template中,寫上datadata 使用時,要將templa…

stm與51單片機哪個更適合新手學

一句話總結 51單片機:像學騎自行車,簡單便宜,但只能在小路上騎。 STM32:像學開汽車,復雜但功能強,能上高速公路,還能拉貨載人(做復雜項目)。 1. 為啥有人說“先學51單片…

Web安全測試-文件上傳繞過-DVWA

Web安全測試-文件上傳繞過-DVWA 很多網站都有上傳資源(圖片或者文件)的功能,資源上傳后一般會存儲在服務器的一個文件夾里面,如果攻擊者繞過了上傳時候的文件類型驗證,傳了木馬或者其他可執行的代碼上去,那服務器就危險了。 我用…

ant-design-vue中的分頁組件自定義

ant-design-vue中的分頁組件自定義 實現效果 實現代碼 需要自己創建一個分頁組件的代碼然后導入進去。 <template><div style"display: flex; justify-content: space-between; margin-bottom: 10px"><div><a-select v-model:value"pageS…

LabVIEW軟件開發過程中如何保證軟件的質量?

一、需求與架構設計階段 明確功能邊界與技術指標 在測試系統設計初期&#xff0c;圍繞比例閥性能測試核心需求&#xff08;如壓力 / 流量信號采集、特性曲線繪制、數據對比分析&#xff09;&#xff0c;定義軟件功能模塊&#xff08;數據采集、邏輯控制、界面顯示&#xff09;&…

Linux 527 重定向 2>1 rsync定時同步(未完)

rsync定時同步 配環境 關閉防火墻、selinux systemctl stop firewalld systemctl disable firewalld setenforce0 vim /etc/SELINUX/config SELINUXdisable515 設置主機名 systemctl set-hostname code systemctl set-hostname backup 配靜態ip rsync 需要穩定的路由表和端…

Vue 3.0 中狀態管理Vuex 與 Pinia 的區別

在 Vue.js 應用開發中&#xff0c;狀態管理是構建復雜應用的關鍵環節。隨著 Vue 3 的普及和 Composition API 的引入&#xff0c;開發者面臨著狀態管理庫的選擇問題&#xff1a;是繼續使用經典的 Vuex&#xff0c;還是轉向新興的 Pinia&#xff1f;本文將從設計理念、API 設計、…

分布式緩存:三萬字詳解Redis

文章目錄 緩存全景圖PreRedis 整體認知框架一、Redis 簡介二、核心特性三、性能模型四、持久化詳解五、復制與高可用六、集群與分片方案 Redis 核心數據類型概述1. String2. List3. Set4. Sorted Set&#xff08;有序集合&#xff09;5. Hash6. Bitmap7. Geo8. HyperLogLog Red…

React useEffect和useEffectLa

原理把對象以樹的形式存檔&#xff0c;根據URL進行匹配渲染對應組件 useEffect 和useLayoutEffect區別 useEffect中的回調函數放在異步任務隊列中&#xff0c;是異步的&#xff0c;會在React渲染&#xff0c; dom 元素更新&#xff0c;瀏覽器繪制完成之后才會執行 useLayout…

multiprocessing多進程使用案例

multiprocessing — 基于進程的并行&#xff1a;https://docs.python.org/zh-cn/3.11/library/multiprocessing.html import sys from fastchat.serve.controller import Controller from fastchat.serve.model_worker import ModelWorker from fastchat.serve.openai_api_ser…

鴻蒙OSUniApp 開發實時天氣查詢應用 —— 鴻蒙生態下的跨端實踐#三方框架 #Uniapp

使用 UniApp 開發實時天氣查詢應用 —— 鴻蒙生態下的跨端實踐 在移動互聯網時代&#xff0c;天氣應用幾乎是每個人手機中的"標配"。無論是出行、旅游還是日常生活&#xff0c;實時獲取天氣信息都極為重要。本文將以"實時天氣查詢應用"為例&#xff0c;詳…

藍橋杯178 全球變暖

題目描述 你有一張某海域 NxN 像素的照片&#xff0c;"."表示海洋、"#"表示陸地&#xff0c;如下所示&#xff1a; ....... .##.... .##.... ....##. ..####. ...###. ....... 其中"上下左右"四個方向上連在一起的一片陸地組成一座島嶼。例如上…

第五十二節:增強現實基礎-簡單 AR 應用實現

引言 增強現實(Augmented Reality, AR)是一種將虛擬信息疊加到真實世界的技術,廣泛應用于游戲、教育、工業維護等領域。與傳統虛擬現實(VR)不同,AR強調虛實結合,用戶無需完全沉浸到虛擬環境中。本文將通過Python和OpenCV庫,從零開始實現一個基礎的AR應用:在檢測到特定…

青少年編程與數學 02-019 Rust 編程基礎 23課題、web服務器

青少年編程與數學 02-019 Rust 編程基礎 23課題、web服務器 一、單線程Web 服務器基本實現步驟完整代碼示例運行結果項目結構注意事項擴展方向 二、多線程Web服務器1. 基本架構設計2. 完整實現代碼項目文件結構文件內容Cargo.tomlsrc/main.rssrc/lib.rsstatic/hello.htmlstatic…

(14)JVM彈性內存管理

文章目錄 &#x1f680; JVM彈性內存管理&#xff1a;K8s環境下的內存優化終極攻略? TL;DR&#x1f635; 等等&#xff0c;為什么我需要關心這個&#xff1f;&#x1f6e0;? 五步搞定彈性內存&#xff08;拯救你的Java應用&#xff09;1?? JVM參數調教2?? 監控指標全覆蓋…

Spring Boot集成Spring AI與Milvus實現智能問答系統

在Spring Boot中集成Spring AI與Milvus實現智能問答系統 引言 隨著人工智能技術的快速發展&#xff0c;智能問答系統在企業中的應用越來越廣泛。然而&#xff0c;傳統的問答系統往往面臨AI幻覺&#xff08;Hallucination&#xff09;問題&#xff0c;即生成不準確或無意義的回…

電腦網絡如何改ip地址?ip地址改不了怎么回事

在日常使用電腦上網時&#xff0c;我們有時會遇到需要更改IP地址的情況&#xff0c;比如訪問某些受限制的網站、解決網絡沖突問題&#xff0c;或者出于隱私保護的需求。然而&#xff0c;許多用戶在嘗試修改IP地址時可能會遇到各種問題&#xff0c;例如IP地址無法更改、修改后無…