溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

redis事務(wù)有什么用

發(fā)布時(shí)間:2021-03-09 10:42:57 來源:億速云 閱讀:528 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹了redis事務(wù)有什么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

是什么

可以一次執(zhí)行多個(gè)命令,本質(zhì)是一組命令的集合。一個(gè)事務(wù)中的所有命令都會(huì)序列化,按順序地串行化執(zhí)行而不會(huì)被其它命令插入,不許加塞。
一次執(zhí)行多個(gè)redis命令。

能干嘛

一個(gè)隊(duì)列中,一次性、順序性、排他性的執(zhí)行一系列命令。

怎么玩

一個(gè)redis事務(wù)的開啟使用了MULTI命令,這個(gè)命令總是會(huì)回復(fù)OK,(不知道能不能成功),此時(shí)用戶可以一次性執(zhí)行多個(gè)命令而不是一個(gè)一個(gè)的執(zhí)行redis將它們?nèi)腙?duì),所有命令將會(huì)被EXEC命令調(diào)用
DISCARD放棄批處理操作

推薦(免費(fèi)):redis教程

常用命令

命令描述
DISCARD取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令。
EXEC執(zhí)行所有事務(wù)塊內(nèi)的命令。
MULTI標(biāo)記一個(gè)事務(wù)塊的開始。
UNWATCH取消 WATCH 命令對所有 key 的監(jiān)視。
WATCH key [key …]監(jiān)視一個(gè)(或多個(gè)) key ,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key 被其他命令所改動(dòng),那么事務(wù)將被打斷。

Case

正常執(zhí)行

redis事務(wù)有什么用

放棄事務(wù)

redis事務(wù)有什么用
全體連坐
redis事務(wù)有什么用
一個(gè)錯(cuò)誤,全體連坐,都不執(zhí)行

冤頭債主

redis事務(wù)有什么用
對于這個(gè)問題,redis對事務(wù)的支持如何理解
redis對事務(wù)是部分支持,這一部分時(shí),對的執(zhí)行,錯(cuò)的不執(zhí)行

case:watch監(jiān)控

悲觀鎖/樂觀鎖/CAS(Check and set)

悲觀鎖(Pessimistic Lock), 顧名思義,就是很悲觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)block直到它拿到鎖。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫里邊就用到了很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。
表鎖:對整張表進(jìn)行加鎖。但是這張表可能很多條很多條數(shù)據(jù),這個(gè)時(shí)候一個(gè)進(jìn)程要進(jìn)行大范圍的改動(dòng),會(huì)導(dǎo)致排隊(duì)的線程越來越多。
行鎖:對每一條記錄進(jìn)行加鎖
樂觀鎖
樂觀鎖(Optimistic Lock), 顧名思義,就是很樂觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù),可以使用版本號等機(jī)制。樂觀鎖適用于多讀的應(yīng)用類型,這樣可以提高吞吐量。
樂觀鎖策略:提交版本必須大于記錄當(dāng)前版本才能執(zhí)行更新

樂觀鎖也并不是盲目的樂觀,比如張三改微信號,李四該qq號,同時(shí)進(jìn)行,開始的時(shí)候版本號都是1,然后張三改完了微信號就去提交,此時(shí)版本號從1到2,李四改完了也去提交,此時(shí)從1卻變成3,就會(huì)報(bào)異常,重新修改。
工作中一般用樂觀鎖

初始化信用卡可用余額和欠額

redis事務(wù)有什么用

無加塞篡改,先監(jiān)控再開啟multi, 保證兩筆金額變動(dòng)在同一個(gè)事務(wù)內(nèi)

redis事務(wù)有什么用
在監(jiān)聽的時(shí)候,發(fā)現(xiàn)另外一個(gè)事務(wù)修改了共享數(shù)據(jù),導(dǎo)致事務(wù)執(zhí)行失敗
redis事務(wù)有什么用
在修改數(shù)據(jù)之前,需要加鎖watch,否則會(huì)導(dǎo)致出錯(cuò)。如果有人修改了我的數(shù)據(jù),我就會(huì)報(bào)異常。

有加塞篡改

監(jiān)控了key,如果key被修改了,后面一個(gè)事務(wù)的執(zhí)行失效

unwatch

取消watch命令對所有key的監(jiān)視
一旦執(zhí)行了exec之前加的監(jiān)控鎖都會(huì)被取消掉了

小結(jié)

Watch指令,類似樂觀鎖,事務(wù)提交時(shí),如果Key的值已被別的客戶端改變, 比如某個(gè)list已被別的客戶端push/pop過了,整個(gè)事務(wù)隊(duì)列都不會(huì)被執(zhí)行
通過WATCH命令在事務(wù)執(zhí)行之前監(jiān)控了多個(gè)Keys,倘若在WATCH之后有任何Key的值發(fā)生了變化, EXEC命令執(zhí)行的事務(wù)都將被放棄,同時(shí)返回Nullmulti-bulk應(yīng)答以通知調(diào)用者事務(wù)執(zhí)行失敗

3階段

? 開啟:以MULTI開始一個(gè)事務(wù)
? 入隊(duì):將多個(gè)命令入隊(duì)到事務(wù)中,接到這些命令并不會(huì)立即執(zhí)行,而是放到等待執(zhí)行的事務(wù)隊(duì)列里面
? 執(zhí)行:由EXEC命令觸發(fā)事務(wù)

3特性

單獨(dú)的隔離操作:事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會(huì)被其他客戶端發(fā)送來的命令請求所打斷。
沒有隔離級別的概念:隊(duì)列中的命令沒有提交之前都不會(huì)實(shí)際的被執(zhí)行,因?yàn)槭聞?wù)提交前任何指令都不會(huì)被實(shí)際執(zhí)行, 也就不存在”事務(wù)內(nèi)的查詢要看到事務(wù)里的更新,在事務(wù)外查詢不能看到”這個(gè)讓人萬分頭痛的問題
不保證原子性:redis同一個(gè)事務(wù)中如果有一條命令執(zhí)行失敗,其后的命令仍然會(huì)被執(zhí)行,沒有回滾
不遵循傳統(tǒng)的ACID中的AI

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“redis事務(wù)有什么用”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI