sql >> データベース >  >> NoSQL >> Redis

インスタントメッセージングシステム用にredispub/ subを設計するにはどうすればよいですか?

    いつものように、あなたはあなた自身のユースケースのためにこのようなものをベンチマークする必要があります-一般的なアドバイスを与えることは不可能です。システム全体またはredisユーザーのいずれかで、システムで開いているファイルの最大数を増やす必要がある場合があります。もちろん、これはWebサーバーを実行しているユーザーにも当てはまります。

    そうは言っても、必ずsocket.on('disconnect')をリッスンする必要があります。 およびquit() ユーザーが離れるときのredisサブスクライバー。また、socket.ioにはredis pub / subを活用するredisバックエンドがあり、部屋の概念もあるため、すでにソケットに依存しているため、これを使用することで問題を回避できる可能性があります。 .io。

    編集: 簡単なチェックの後、991人のサブスクライバーの後にRedisから次のエラーメッセージが表示されます:

    Ready check failed: Error: Error: ERR max number of clients reached
    

    これはデフォルトのredis.confからのものです :

    # Set the max number of connected clients at the same time. By default
    # this limit is set to 10000 clients, however if the Redis server is not
    # able ot configure the process file limit to allow for the specified limit
    # the max number of allowed clients is set to the current file limit
    # minus 32 (as Redis reserves a few file descriptors for internal uses).
    #
    # Once the limit is reached Redis will close all the new connections sending
    # an error 'max number of clients reached'.
    #
    # maxclients 10000
    

    私のシステム(Ubuntu 11.11)には、デフォルトのnofileが付属しています 1024の制限があるので、992の接続されたクライアントの後で、私のクイックテストは失敗するはずです。これは、テストからほぼ正しいようです(パブリッシャー用に1つのクライアントもあります)。あなたへの私の提案はあなたのnofileを調べることです 制限(私のシステムでは、/etc/security/limits.{conf,d/*}にあります そしてあなたのredismaxclients 設定してから、ベンチマーク、ベンチマーク、ベンチマーク!




    1. Mac OS Xでmongodを停止するためのクリーンな方法は何ですか?

    2. 接続ごとに新しいRedisクライアントを作成する必要がありますか?

    3. Django Rest FrameworkでRedisキャッシュを実装するにはどうすればよいですか?

    4. casbahmongodbリストをscala/playでjsonに変換する方法