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