009_Redis的事物
1. Redis事務可以一次執行多個命令, 并且帶有以下三個重要的保證:
1.1. 批量操作在發送exec命令前被放入隊列緩存。
1.2. 收到exec命令后進入事務執行, 事務中任意命令執行失敗, 其余的命令依然被執行。
1.3. 在事務執行過程, 其他客戶端提交的命令請求不會插入到事務執行命令序列中。
2. 一個事務從開始到執行會經歷以下三個階段:
2.1. 開始事務。
2.2. 命令入隊。
2.3. 執行事務。
3. 單個Redis命令的執行是原子性的, 但Redis沒有在事務上增加任何維持原子性的機制, 所以Redis事務的執行并不是原子性的。事務可以理解為一個打包的批量執行腳本, 但批量指令并非原子化的操作, 中間某條指令的失敗不會導致前面已做指令的回滾, 也不會造成后續的指令不做。
4. watch命令
4.1. watch命令用于監視一個(或多個)key, 如果在事務執行之前這個(或這些)key被其他命令所改動, 那么事務將被打斷。
4.2. 語法: watch key [key ...]。
4.3. 總是返回OK。
5. unwatch命令
5.1. unwatch命令用于取消watch命令對所有key的監視。
5.2. 語法: unwatch。
5.3. 總是返回OK。
6. multi命令
6.1. multi命令用于標記一個事務塊的開始。
6.2. 事務塊內的多條命令會按照先后順序被放進一個隊列當中, 最后由exec命令原子性(atomic)地執行。
6.3. 語法: multi。
6.4. 總是返回OK。
7. exec命令
7.1. exec命令用于執行所有事務塊內的命令。
7.2. 語法: exec。
7.3. 假如某個key(或某些)正處于watch命令的監視之下, 且事務塊中有和這個(或這些)key相關的命令, 那么exec命令只在這個(或這些)key沒有被其他命令所改動的情況下執行并生效, 否則該事務被打斷(abort)。
7.4. 事務塊內所有命令的返回值, 按命令執行的先后順序排列。 當操作被打斷時, 返回空值nil。
7.5. 一個帶監聽的正常事物流程
7.6. 一個帶監聽的被打斷的時候流程
7.6.1.?客戶端一
7.6.2.?客戶端二
8. discard命令
8.1. discard命令用于取消事務, 放棄執行事務塊內的所有命令。
8.2. 如果正在使用watch命令監視某個(或某些)key, 那么取消所有監視, 等同于執行命令unwatch。
8.3. 語法: discard。
8.4. 總是返回OK。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的009_Redis的事物的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 021_Jedis的ZSet数据类型
- 下一篇: 022_Jedis的事物