這篇文章主要介紹了redis事務(wù)有什么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元上蔡做網(wǎng)站,已為上家服務(wù),為上蔡各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
是什么
可以一次執(zhí)行多個(gè)命令,本質(zhì)是一組命令的集合。一個(gè)事務(wù)中的所有命令都會(huì)序列化,按順序地串行化執(zhí)行而不會(huì)被其它命令插入,不許加塞。
一次執(zhí)行多個(gè)redis命令。
能干嘛
一個(gè)隊(duì)列中,一次性、順序性、排他性的執(zhí)行一系列命令。
怎么玩
一個(gè)redis事務(wù)的開(kāi)啟使用了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ù)塊的開(kāi)始。 |
| UNWATCH | 取消 WATCH 命令對(duì)所有 key 的監(jiān)視。 |
| WATCH key [key …] | 監(jiān)視一個(gè)(或多個(gè)) key ,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key 被其他命令所改動(dòng),那么事務(wù)將被打斷。 |
Case
正常執(zhí)行

放棄事務(wù)

全體連坐
一個(gè)錯(cuò)誤,全體連坐,都不執(zhí)行
冤頭債主

對(duì)于這個(gè)問(wèn)題,redis對(duì)事務(wù)的支持如何理解
redis對(duì)事務(wù)是部分支持,這一部分時(shí),對(duì)的執(zhí)行,錯(cuò)的不執(zhí)行
case:watch監(jiān)控
悲觀鎖/樂(lè)觀鎖/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ù)庫(kù)里邊就用到了很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。
表鎖:對(duì)整張表進(jìn)行加鎖。但是這張表可能很多條很多條數(shù)據(jù),這個(gè)時(shí)候一個(gè)進(jìn)程要進(jìn)行大范圍的改動(dòng),會(huì)導(dǎo)致排隊(duì)的線程越來(lái)越多。
行鎖:對(duì)每一條記錄進(jìn)行加鎖
樂(lè)觀鎖
樂(lè)觀鎖(Optimistic Lock), 顧名思義,就是很樂(lè)觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù),可以使用版本號(hào)等機(jī)制。樂(lè)觀鎖適用于多讀的應(yīng)用類型,這樣可以提高吞吐量。
樂(lè)觀鎖策略:提交版本必須大于記錄當(dāng)前版本才能執(zhí)行更新
樂(lè)觀鎖也并不是盲目的樂(lè)觀,比如張三改微信號(hào),李四該qq號(hào),同時(shí)進(jìn)行,開(kāi)始的時(shí)候版本號(hào)都是1,然后張三改完了微信號(hào)就去提交,此時(shí)版本號(hào)從1到2,李四改完了也去提交,此時(shí)從1卻變成3,就會(huì)報(bào)異常,重新修改。
工作中一般用樂(lè)觀鎖
初始化信用卡可用余額和欠額

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

在監(jiān)聽(tīng)的時(shí)候,發(fā)現(xiàn)另外一個(gè)事務(wù)修改了共享數(shù)據(jù),導(dǎo)致事務(wù)執(zhí)行失敗
在修改數(shù)據(jù)之前,需要加鎖watch,否則會(huì)導(dǎo)致出錯(cuò)。如果有人修改了我的數(shù)據(jù),我就會(huì)報(bào)異常。
有加塞篡改
監(jiān)控了key,如果key被修改了,后面一個(gè)事務(wù)的執(zhí)行失效
unwatch
取消watch命令對(duì)所有key的監(jiān)視
一旦執(zhí)行了exec之前加的監(jiān)控鎖都會(huì)被取消掉了
小結(jié)
Watch指令,類似樂(lè)觀鎖,事務(wù)提交時(shí),如果Key的值已被別的客戶端改變, 比如某個(gè)list已被別的客戶端push/pop過(guò)了,整個(gè)事務(wù)隊(duì)列都不會(huì)被執(zhí)行
通過(guò)WATCH命令在事務(wù)執(zhí)行之前監(jiān)控了多個(gè)Keys,倘若在WATCH之后有任何Key的值發(fā)生了變化, EXEC命令執(zhí)行的事務(wù)都將被放棄,同時(shí)返回Nullmulti-bulk應(yīng)答以通知調(diào)用者事務(wù)執(zhí)行失敗
3階段
? 開(kāi)啟:以MULTI開(kāi)始一個(gè)事務(wù)
? 入隊(duì):將多個(gè)命令入隊(duì)到事務(wù)中,接到這些命令并不會(huì)立即執(zhí)行,而是放到等待執(zhí)行的事務(wù)隊(duì)列里面
? 執(zhí)行:由EXEC命令觸發(fā)事務(wù)
3特性
單獨(dú)的隔離操作:事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過(guò)程中,不會(huì)被其他客戶端發(fā)送來(lái)的命令請(qǐng)求所打斷。
沒(méi)有隔離級(jí)別的概念:隊(duì)列中的命令沒(méi)有提交之前都不會(huì)實(shí)際的被執(zhí)行,因?yàn)槭聞?wù)提交前任何指令都不會(huì)被實(shí)際執(zhí)行, 也就不存在”事務(wù)內(nèi)的查詢要看到事務(wù)里的更新,在事務(wù)外查詢不能看到”這個(gè)讓人萬(wàn)分頭痛的問(wèn)題
不保證原子性:redis同一個(gè)事務(wù)中如果有一條命令執(zhí)行失敗,其后的命令仍然會(huì)被執(zhí)行,沒(méi)有回滾
不遵循傳統(tǒng)的ACID中的AI
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“redis事務(wù)有什么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
本文名稱:redis事務(wù)有什么用
文章鏈接:http://www.chinadenli.net/article30/pgcgpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、企業(yè)建站、商城網(wǎng)站、做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)