Redis——事务
Redis事務(wù)
Q:是什么?
A:可以一次執(zhí)行多個(gè)命令,本質(zhì)是一組命令的集合。一個(gè)事務(wù)中的所有命令都會(huì)序列化,按順序地串行化執(zhí)行而不會(huì)被其他命令插入。
Q:相關(guān)命令?
A:
| DISCARD | 取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)地所有命令 |
| EXEC | 執(zhí)行所有事務(wù)塊內(nèi)的命令 |
| MULTI | 標(biāo)記一個(gè)事務(wù)塊的開始 |
| UNWATCH | 取消WATCH命令對(duì)所有key的監(jiān)視 |
| WATCH key [key ...] | 監(jiān)視一個(gè)(或多個(gè))key,如果在事務(wù)執(zhí)行之前這個(gè)(或這些)key被其他命令所改動(dòng),那么事務(wù)將被打斷 |
?
?
?
?
?
?
?
?
Q:經(jīng)歷階段?
A:
- 開始事務(wù)
- 命令入隊(duì)
- 執(zhí)行事務(wù)
?
實(shí)例
- 正常執(zhí)行
- ?放棄事務(wù)
在事務(wù)開啟前設(shè)置k1的值為11,開啟后再次設(shè)置k1,將其值改為kk,放棄事務(wù)后取k1值為11。
- 全體連坐
若是在事務(wù)中直接報(bào)錯(cuò)的話,那整個(gè)事務(wù)中的操作都將失敗。
- 冤頭債主
誰(shuí)錯(cuò)找誰(shuí),其他正常執(zhí)行。
watch監(jiān)控
在此之前先介紹一下悲觀鎖與樂觀鎖。
悲觀鎖:顧名思義,就是很悲觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)block直到它拿到鎖。
樂觀鎖:顧名思義,就是很樂觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù),可以使用版本號(hào)等機(jī)制。
實(shí)例
設(shè)置余額為100,支出為0,監(jiān)控余額,開啟事務(wù),余額減少10,支出增加10,執(zhí)行事務(wù)后結(jié)果如上。
注:一旦執(zhí)行了exec那之前加的監(jiān)控鎖都會(huì)被取消掉。
But
你對(duì)余額監(jiān)控后有人又對(duì)你的余額進(jìn)行了修改,腫么辦???
你會(huì)看到事務(wù)執(zhí)行后并沒有成功,獲取balance為修改后的500,支出也還是原來(lái)的10。此時(shí)unwatch就派上用場(chǎng)了,如果在你watch之后有人修改了你的數(shù)據(jù),那你就unwatch,此時(shí)的數(shù)據(jù)為最新的數(shù)據(jù),當(dāng)然你以使用別人修改后的數(shù)據(jù),也可以自己重新修改數(shù)據(jù)。(本文使用的是別人修改后的數(shù)據(jù))
?
最后,大家還是自己動(dòng)手練練。
轉(zhuǎn)載于:https://www.cnblogs.com/rabbitli/p/10988891.html
總結(jié)
- 上一篇: 茶颜悦色回应满杯奶茶放久了变半杯:奶沫放
- 下一篇: php网站怎么写一个聊天