Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie entwirft man Redis Pub/Sub für ein Instant-Messaging-System?

Wie immer müssen Sie solche Dinge für Ihren eigenen Anwendungsfall bewerten – es ist nicht möglich, allgemeine Ratschläge zu geben. Möglicherweise müssen Sie die maximale Anzahl geöffneter Dateien auf Ihrem System entweder systemweit oder für den redis-Benutzer erhöhen. Dies gilt natürlich auch für den Benutzer, der Ihren Webserver betreibt.

Achten Sie jedoch darauf, auf socket.on('disconnect') zu hören und quit() der Redis-Abonnent, wenn ein Benutzer geht. Es könnte Sie auch interessieren, dass socket.io über ein Redis-Backend verfügt, das Redis Pub/Sub nutzt, und es hat auch das Konzept von Räumen, sodass Sie sich möglicherweise einige Probleme ersparen können, wenn Sie das verwenden, da Sie bereits von Socket abhängig sind .io.

Bearbeiten: Nach kurzer Überprüfung bekomme ich nach 991 Abonnenten diese Fehlermeldung von Redis:

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

Hier ist die standardmäßige 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

Mein System (Ubuntu 11.11) wird standardmäßig mit einem nofile geliefert Limit von 1024, also sollte mein Schnelltest nach 992 verbundenen Clients fehlschlagen, was aus dem Test ungefähr richtig erscheint (ich habe auch einen Client für den Publisher). Mein Vorschlag an Sie ist, Ihr nofile zu überprüfen limit (auf meinem System ist es in /etc/security/limits.{conf,d/*} und Ihre redis maxclients Einstellung und dann Benchmark, Benchmark, Benchmark!