2016-11-04 51 views
0

有兩個系統共享一個redis數據庫,一個系統只讀redis,另一個更新它。比較redis命令:multi和mget

讀取系統太忙了,redis無法處理它,爲了減少對redis的請求數,我找到了「mget」,但我也找到了「multi」。

  1. 我敢肯定,mget會減少請求數量,但會「多」做同樣的事情嗎?我認爲「multi」會強制redis服務器保留關於此事務的一些信息,並逐個從客戶端收集此事務中的請求,因此發送的請求總數保持不變,但返回的結果將組合在一起,對?

  2. 所以,如果我只是在讀取KeyA,keyB,keyC中的「multi」時其他寫入系統改變了KeyB的值,會發生什麼?

回答

1

簡短的回答:您應該使用MGET

MULTI用於事務,也不會降低請求數量。此外,將來會棄用MULTI命令MORE,因爲有更好的選擇:lua scripting

  • 所以,如果我剛纔讀科亞,KEYB,keyC在「多」的時候,其他的寫入系統改變KEYB的價值,會發生什麼?
  • 由於MULTI(與EXEC)命令可以保證交易,所有三個GET命令(讀取操作)的原子執行。如果更新發生在讀取操作之前,您將獲得舊值。否則,你會得到新的價值。

    順便說一句,還有另一種選擇來減少RTT:PIPELINE。但是,在你的情況下,MGET應該是最好的選擇。