2016-03-21 38 views
1

我有一個ID列表。對於每個id,我做一個web請求,它返回與id關聯的名字。然後將這個鍵/值(id /名稱)對添加到字典中。一旦完成,我使用hmset將字典添加到redis。哪個redis方法更好:多次調用HSET或者調用HMSET一次?

我想知道是否最好在每次請求後直接將每個鍵/值對添加到redis中。

我認爲這歸結爲:更昂貴的是,多次調用redis,或額外的內存使用的價值存儲在字典中?

回答

1

通常,使用Redis和優化性能時,最好將跳閘保存到網絡而不是內存字節。

Redis存儲數據非常多efficiently。如果在redis-cli會話中運行INFO MEMORY命令,則會看到正在使用的內存有多少。

延遲會影響響應能力,這就是爲什麼您通常希望儘可能利用流水線的原因。 Marc Gravell illustrates解釋了他的Redis的C#API。

0

不幸的是,我認爲沒有簡單的答案 - 它取決於您實際擁有的約束以及您如何計算此類處理的成本。在某些情況下,內存比處理時間更有價值,但在其他情況下則相反。

首先 - 確保您是否必須擔心這種優化。也許你可以選擇最適合你的方法,這就足夠了。

在大多數情況下,對Redis的請求速度非常快(與HTTP請求相比),因此其時間可以忽略不計。

取決於您的鍵/ val對的大小,將此數據寫入redis的成本也可能非常高,以致請求開銷可以忽略不計。

無論如何,如果它不夠,那就要考慮到你可能有的限制。例如:

  • 腳本在處理過程中可以使用多少內存?
  • 發出HTTP請求後,redis中對應的key/val應該多快出現?
  • 您的redis服務器可以處理多少請求/秒?

另請注意,使用HMSET將使您的代碼更復雜,並且需要更多努力來編寫此類腳本。

0

你的例程會初始化Redis DB。正如我所說的,首先不要考慮優化。做一些簡單的理解和維護,因爲這個腳本是一種init Redis DB。 出於這個原因,去HSET。

如果您遇到性能/運行時問題,您可以輕鬆更改此代碼,因爲它易於編寫。 :)

我建議你跟蹤你在redis中使用的密鑰,因爲你的數據庫在使用後可能會變得混亂。

開始時不要考慮內存佔用情況,Redis確實爲您管理得非常好。 (見Redis FAQ