redis(十四:事務(wù))

事務(wù)在執(zhí)行時(shí),會(huì)提供專門的屬性保證随闪,包括原子性(Atomicity)阳似、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)铐伴,也就是 ACID 屬性撮奏。

Redis 提供了 MULTI(開啟事務(wù))、EXEC (提交事務(wù))兩個(gè)命令來完成事務(wù)

原子性
1当宴,命令入隊(duì)時(shí)就報(bào)錯(cuò)畜吊,會(huì)放棄事務(wù)執(zhí)行,保證原子性户矢;
2玲献,命令入隊(duì)時(shí)沒報(bào)錯(cuò),實(shí)際執(zhí)行時(shí)報(bào)錯(cuò)梯浪,不保證原子性捌年;
3,EXEC 命令執(zhí)行時(shí)實(shí)例故障挂洛,如果開啟了 AOF 日志礼预,可以保證原子性。(使用 redis-check-aof 工具檢查 AOF 日志文件抹锄,這個(gè)工具可以把未完成的事務(wù)操作從 AOF 文件中去除。)荠藤。如果只有 RDB日志也沒問題伙单,RDB不會(huì)在事務(wù)執(zhí)行時(shí)執(zhí)行,所以 RDB 文件中不會(huì)記錄只執(zhí)行了一部分的結(jié)果數(shù)據(jù)哈肖。之后用 RDB 恢復(fù)實(shí)例數(shù)據(jù)吻育,恢復(fù)的還是事務(wù)之前的數(shù)據(jù)。

重點(diǎn)看第二點(diǎn):

#開啟事務(wù)
127.0.0.1:6379> MULTI
OK
#發(fā)送事務(wù)中的第一個(gè)操作淤井,LPOP命令操作的數(shù)據(jù)類型不匹配布疼,此時(shí)并不報(bào)錯(cuò)
127.0.0.1:6379> LPOP key1
QUEUED
#發(fā)送事務(wù)中的第二個(gè)操作
127.0.0.1:6379> DECR key2
QUEUED
#實(shí)際執(zhí)行事務(wù),事務(wù)第一個(gè)操作執(zhí)行報(bào)錯(cuò)
127.0.0.1:6379> EXEC
1) (error) WRONGTYPE Operation against a key holding the wrong kind of value
2) (integer) 8

執(zhí)行失敗Redis并不會(huì)回滾币狠;Redis 中并沒有提供回滾機(jī)制游两。雖然 Redis 提供了 DISCARD 命令,但是漩绵,這個(gè)命令只能用來主動(dòng)放棄事務(wù)執(zhí)行贱案,把暫存的命令隊(duì)列清空,起不到回滾的效果止吐。

補(bǔ)充:
redis 127.0.0.1:6379>type key
此時(shí)會(huì)顯示出該key存儲(chǔ)在現(xiàn)在redis服務(wù)器中的類型宝踪,例如:
redis 127.0.0.1:6379>hash
則表示key為以hash類型存儲(chǔ)在redis服務(wù)器里的侨糟,此時(shí)操作這個(gè)數(shù)據(jù)就必須使用hset、hget等操作方法瘩燥。
如果是zset如下:
redis 127.0.0.1:6379>zset
則表示數(shù)據(jù)類型為Sorted Sets的秕重。此時(shí)就需要使用zadd、zrange等操作方法厉膀,否則就會(huì)報(bào)WRONGTYPE Operation against a key holding the wrong kind of value這個(gè)錯(cuò)誤溶耘!

隔離性
1,并發(fā)操作在 EXEC 命令前執(zhí)行站蝠,此時(shí)汰具,隔離性的保證要使用 WATCH 機(jī)制來實(shí)現(xiàn),否則隔離性無法保證菱魔;
2留荔,并發(fā)操作在 EXEC 命令后執(zhí)行,此時(shí)澜倦,隔離性可以保證聚蝶。

WATCH 機(jī)制的作用是,在事務(wù)執(zhí)行前藻治,監(jiān)控一個(gè)或多個(gè)鍵的值變化情況碘勉,當(dāng)事務(wù)調(diào)用 EXEC 命令執(zhí)行時(shí),WATCH 機(jī)制會(huì)先檢查監(jiān)控的鍵是否被其它客戶端修改了桩卵。如果修改了验靡,就放棄事務(wù)執(zhí)行,避免事務(wù)的隔離性被破壞雏节。然后胜嗓,客戶端可以再次執(zhí)行事務(wù),此時(shí)钩乍,如果沒有并發(fā)修改事務(wù)數(shù)據(jù)的操作了辞州,事務(wù)就能正常執(zhí)行,隔離性也得到了保證寥粹。

持久性
如果 Redis 沒有使用 RDB 或 AOF变过,那么事務(wù)的持久化屬性肯定得不到保證。
而RBD快照時(shí)間比較長涝涤,就是AOF的everysec也是有1秒的數(shù)據(jù)丟失可能性媚狰,所以持久性屬性是得不到保證的。

一致性
一致性理解:應(yīng)用系統(tǒng)從一個(gè)正確的狀態(tài)到另一個(gè)正確的狀態(tài)阔拳,而ACID就是說事務(wù)能夠通過AID來保證這個(gè)C的過程哈雏。C是目的,AID都是手段。
既然手段達(dá)不到保障裳瘪,一致性也就沒什么談?wù)摰谋匾恕?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末土浸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彭羹,更是在濱河造成了極大的恐慌黄伊,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件派殷,死亡現(xiàn)場離奇詭異还最,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)毡惜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拓轻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人经伙,你說我怎么就攤上這事扶叉。” “怎么了帕膜?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵枣氧,是天一觀的道長。 經(jīng)常有香客問我垮刹,道長达吞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任荒典,我火速辦了婚禮酪劫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寺董。我一直安慰自己覆糟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布螃征。 她就那樣靜靜地躺著搪桂,像睡著了一般透敌。 火紅的嫁衣襯著肌膚如雪盯滚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天酗电,我揣著相機(jī)與錄音魄藕,去河邊找鬼。 笑死撵术,一個(gè)胖子當(dāng)著我的面吹牛背率,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼寝姿,長吁一口氣:“原來是場噩夢啊……” “哼交排!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饵筑,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤埃篓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后根资,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體架专,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年玄帕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了部脚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裤纹,死狀恐怖委刘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情服傍,我是刑警寧澤钱雷,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站吹零,受9級(jí)特大地震影響罩抗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灿椅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一套蒂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茫蛹,春花似錦操刀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至柬采,卻和暖如春欢唾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粉捻。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工礁遣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肩刃。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓祟霍,卻偏偏與公主長得像杏头,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沸呐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容