2017-08-01 30 views
0

我們有一個使用Redis進行緩存的Web應用程序。Redis String在批處理/事務中獲取?

我注意到一些等待時間尖峯當與200KB值一個密鑰與幾乎併發請求(的Fiddler移+相同的請求的ř20 - 50倍)進行訪問。

該物品的正常讀取時間大約爲50ms,但峯值約爲800ms。

spike

我在想,如果有一種方法來優化呢?有沒有辦法使用管道/批處理GET?它會有所作爲嗎?

回答

0

這可能嗎?也許。問題是,你所看到的請求是不相關的,彼此不知道。所以,我們要做配料,你需要做的是這樣的:

  1. 收集所有的鍵從傳入的請求,請求。
  2. 每n毫秒會爲多個密鑰發出單個redis GET
  3. 將結果分配給所有等待的呼叫者。

這會產生很多管理開銷並降低請求速度。

使用內存中的cache可能會更好地在一段時間內存儲結果,並將它們重用以用於將來的請求。

由於其他請求目前從redis中獲取的密鑰請求來到的情況,這仍然很棘手。如果你關心這種事情,可能很難去除空中請求。

+0

謝謝captncraig。內存中緩存的想法聽起來不錯。我想知道爲什麼Redis StringGet似乎突然涌現。我認爲這可能與爭取在Connection上訪問的請求有關。 – Water

+0

由於時間不好,感覺您的redis實例可能尺寸過小或效能不足,但很難從這裏得知。可能是任何數量的網絡因素或配置。 – captncraig

+0

對於redis實例,20-50個請求實際上是一個很小的數字。即使是小型服務器上的大型請求也應該比這更快。 – captncraig

相關問題