2012-09-26 21 views
3

我將在具有6個內核,12個線程和32 GB RAM的專用服務器上運行redis。我使用redis作爲主數據存儲。應用程序有一些哈希,集合和列表,但它們都構成同一個應用程序。爲了利用所有線程,我可以在不同的端口上啓動多個redis實例,併爲每個端口分配一些redis結構。這會有什麼問題嗎?我想在我的客戶端代碼,我將不得不作出不同端口上的多個連接到讀/寫應用程序數據..在多線程專用服務器上優化Redis

感謝

回答

2

Redis的被單線程的,則需要啓動多個實例來利用多核或多CPU的好處。不同的端口已被使用,您可能還需要更改配置文件中的某些其他參數,以避免衝突:

  • pidfile進程文件
  • 端口
  • unixsocket
  • 日誌文件
  • dbfilename(或可替代dir)

在客戶端代碼中,每個Redis實例至少需要一個連接。

主要問題是一旦在不同的實例中添加了一些密鑰,就不能再運行涉及多個密鑰的命令而不首先檢查所有密鑰都在同一個實例上(例如,您不能再計算存儲的集合的交集在不同的Redis實例上,至少不用SINTER命令)。

+0

謝謝迪迪埃。我很高興得到SO的主要redis專家之一的回覆。我看到你的觀點,即無法對跨越實例的密鑰執行命令,這是一個重要的限制。這意味着事先預見所有的訪問路徑,這並不總是可能的。如果我爲每個數據結構使用一個線程,會更容易一些,因爲命令只是每個數據結構 - 這樣我可以使用多達5個線程。謝謝 – mongle

+0

我相信每個數據結構的一個實例不會飛。一些命令涉及多個數據結構(set和zset之間的交集,涉及散列引用的排序命令等)。 –

+0

通常,分發機制取決於應用程序。例如,對於多租戶應用程序,通過租賃分發數據是有意義的。對於其他應用程序,通常由功能標準驅動。 –