[Redis] [Go] Send 不加 MULTI 會怎麼樣


做redis transaction 基本上先放MULTI,再SEND要操作的行為後,最後送出EXEC。

但SEND 本身是在做queue的動作,即使沒有先送MULTI,也是可以成功把做queue的指令丟給redis。

為了弄清楚差異,做了一點實驗,以下搭配GOlang。




實驗一:

說明:
        將最後的EXEC註解掉,中間插個DO。

結果:
        結果DO以前有寫入redis,DO以後的沒作用。





實驗二:

說明:
        根據實驗一的基礎上,但最一開始有用MULTI包起來。

結果:
        結果即使中間有DO,但都沒寫入redis(DO也沒寫入?)。





實驗三:

說明:
        將實驗二最下面的EXEC註解打開。

結果:
        通通寫入redis。











結論:
       

  1.         如果沒包MULTI,會因為有DO的指令,沒而被一起執行下去。
  2.         如果有包MULTI,因為MULTI會認EXEC,而導致中間的DO,被吃掉。
  3.         碰到EXEC,不管之前有包幾個MULTI,都會一併執行。






Created Date : 2018/08/16


Last Updated Date : 2018/08/16







留言

這個網誌中的熱門文章

[Go] 型態轉換 type convert

[Go] Golang用法 package import 前面的底線

[Go] 指標 pointer with golang