2016-12-04 5 views
2

サーバー12コア、64 GB RAMでnodejsを使用する予定です。グローバルオブジェクト対Redis(nodejs)の使用

私はそうのようなオブジェクトがある場合 -

obj= {x1: [user1_id, user2_id, user4_id, user89_id, user541_id], 
     x2: [user55_id, user44_id, user3_id, user89_id, user132_id], 
     .... } 

質問:どの時点でそれはRedisのではなく、グローバルオブジェクトでOBJを保存する意味がありませんの?
(OBJの持続性が問題ではありません) (スケールでは、私は5つの要素ごとの平均で〜30万キーを持つことを期待)

質問:最大ヒープサイズとして許可されてどのようなnodejsプロセス?ここで

+0

nodejsクラスタリングを使用して12コアを使用する場合は、複数のクラスタ化プロセスがすべてデータにアクセスできるようにredisを使用します。 redisを使用すると、redisストレージを別のプロセスに移動してnodejsプロセスから移動させるので、nodejsのメモリ使用量の向上にも役立ちます。 – jfriend00

+0

メインサーバプロセス内でcluster.fork()を使用すると、フォークされたプロセス内でグローバル変数にアクセスできなくなりますか? – vjjj

+0

グローバルは、node.jsクラスタ化されたプロセス間で共有されていないか、または他のプロセスと共有されていません。 – jfriend00

答えて

5

はRedisのに移動するには、いくつかの理由です:

  1. あなたが高負荷を処理するために複数のコアを活用するために、あなたのNode.jsプロセスをクラスタ化したい場合。 node.jsのグローバル変数は、クラスタ化されたプロセス間で共有されないため、各node.jsクラスタがアクセスできる別のプロセス(redis)によってデータを管理する必要があります。

  2. node.js内での大量のメモリ使用が懸念される場合は、 redisに移動すると、データによって使用されるメモリがnode.jsプロセスから移動します。

  3. Redisのデータ管理やその他の機能が必要な場合。 this articleパー

、あなたは(1.76ギガバイトのデフォルトのメモリのキャップから26ギガバイトまで)かなり遠くのNode.jsの許可メモリ使用量をダイヤルアップすることができます。

関連する問題