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