Ich entwickle eine node.js-App und benötige eine starke Redis-Nutzung. Die App wird über 8 CPU-Kerne verteilt.
Momentan habe ich 100 gleichzeitige Verbindungen zu Redis, weil jeder Arbeiter pro CPU mehrere Module hat, auf denen cluster
läuft.
Szenario A:
Datei1.js:
%Vor%Datei2.js
%Vor%SZENARIO B:
redis.js
%Vor%Datei1.js
%Vor%Datei2.js
%Vor%Welcher Ansatz ist besser: Erstellen Sie eine neue Redis-Instanz in jeder neuen Datei, die ich einführe (Szenario A), oder erstellen Sie eine globale Redis-Verbindung (Szenario B) und teilen Sie diese Verbindung über alle Module hinweg. Was sind die Nachteile / Vorteile jeder Lösung?
Vielen Dank im Voraus!
Wenn ich mit einer solchen Frage konfrontiert werde, denke ich generell an drei grundlegende Fragen.
Nicht unbedingt in dieser Reihenfolge, da es vom Szenario abhängt, aber ich glaube, dass in diesem Fall alle drei Fragen für Option B sprechen. Wenn Sie jemals Optionen für createClient ändern müssen, müssen Sie sie in jeder Datei bearbeiten, die sie verwendet. In Option A ist jede Datei, die redis verwendet, und Option B ist nur redis.js. Auch wenn ein neueres oder anderes Produkt herauskommt und Sie redis ersetzen möchten, wäre es machbar, redis.js als Wrapper für ein anderes Paket oder sogar einen neueren Redis-Client zu verwenden, der die Konvertierungszeit erheblich verkürzt.
Globals sind generell eine schlechte Sache, aber in diesem Beispiel sollte redis.js keinen veränderlichen Zustand speichern, also gibt es kein Problem mit einem Global / Singleton in diesem Kontext.
Sowohl Node als auch Redis können ziemlich viele Verbindungen verarbeiten, also ist das kein Problem.
In Ihrer Situation erstellen Sie Redis-Verbindungen beim Start Ihrer Anwendung, sodass die Anzahl der Verbindungen, die Sie einrichten, begrenzt ist (in dem Sinne, dass nach dem Start Ihrer Anwendung die Anzahl der Verbindungen konstant ist ).
Situationen, in denen Sie die gleiche Verbindung wiederverwenden möchten, befinden sich in sehr dynamischen Situationen, zum Beispiel mit einem HTTP-Server, auf dem Sie Redis für jede Anfrage abfragen müssen. Das Erstellen einer neuen Verbindung für jede Anforderung wäre eine Verschwendung von Ressourcen (Verbindungen werden ständig erstellt und zerstört) und die Wiederverwendung einer Verbindung für jede Anforderung wäre vorzuziehen.
Was für eines der beiden Szenarios ich bevorzuge, ich lehne mich selbst Szenario A zu.