Redis erfreut sich in der aktuellen Technologie-Community großer Beliebtheit. Von einem kleinen persönlichen Projekt von Antirez bis zum Industriestandard für In-Memory-Datenspeicherung hat Redis einen langen Weg zurückgelegt. Die meisten Menschen können Redis richtig verwenden. Im Folgenden werden 10 Tipps für die korrekte Verwendung von Redis erläutert.
1. Hören Sie auf, SCHLÜSSEL * zu verwenden
Okay, diesen Artikel mit der Infragestellung dieses Befehls zu beginnen, ist vielleicht kein guter Weg, aber vielleicht der wichtigste bisschen. Wenn wir auf die Statistiken einer Redis-Instanz achten, geben wir oft schnell den Befehl „KEYS *“ ein, damit die Schlüsselinformationen klar angezeigt werden. Um fair zu sein, aus Programmiersicht neigen wir dazu, Pseudocode wie den folgenden zu schreiben:
for key in 'keys *': doAllTheThings()
Aber wenn Sie 13 Millionen Schlüssel haben, wird die Ausführungsgeschwindigkeit sein langsamer sein. Da die zeitliche Komplexität des Befehls KEYS O(n) beträgt, wobei n die Anzahl der zurückzugebenden Schlüssel ist, hängt die Komplexität dieses Befehls von der Größe der Datenbank ab. Und während der Ausführung dieses Vorgangs können in Ihrer Instanz keine anderen Befehle ausgeführt werden.
Als alternativen Befehl sehen Sie sich SCAN an, der Ihnen eine benutzerfreundlichere Vorgehensweise ermöglicht ... SCAN scannt die Datenbank in einer inkrementellen Iteration. Dieser Vorgang wird basierend auf dem Iterator des Cursors ausgeführt, sodass Sie ihn jederzeit nach Belieben anhalten oder fortsetzen können.
2. Finden Sie den Übeltäter heraus, der Redis verlangsamt
Da Redis nicht über sehr detaillierte Protokolle verfügt, ist es sehr schwierig zu wissen, was in der Redis-Instanz geschieht . Schwierig. Glücklicherweise bietet Redis ein Befehlsstatistiktool wie das folgende:
127.0.0.1:6379> INFO commandstats # Commandstats cmdstat_get:calls=78,usec=608,usec_per_call=7.79 cmdstat_setex:calls=5,usec=71,usec_per_call=14.20 cmdstat_keys:calls=2,usec=42,usec_per_call=21.00 cmdstat_info:calls=10,usec=1931,usec_per_call=193.10
Mit diesem Tool können Sie Schnappschüsse aller Befehlsstatistiken anzeigen, z. B. wie oft der Befehl ausgeführt wurde wurde ausgeführt. Die Anzahl der Millisekunden, die zur Ausführung des Befehls benötigt wurden (Gesamt- und Durchschnittszeit für jeden Befehl)
Führen Sie einfach den Befehl CONFIG RESETSTAT aus, um ihn zurückzusetzen, damit Sie ein brandneues statistisches Ergebnis erhalten.
3. Verwenden Sie die Redis-Benchmark-Ergebnisse als Referenz, anstatt sie zu verallgemeinern
Salvatore, der Vater von Redis, sagte: „Testen Sie Redis durch die Ausführung von GET/SET-Befehlen.“ ist, als würde man testen, wie gut die Scheibenwischer eines Ferraris an einem regnerischen Tag die Spiegel reinigen.“ Oft kommen Leute zu mir und wollen wissen, warum ihre Redis-Benchmark-Statistiken niedriger sind als die optimalen Ergebnisse. Aber wir müssen verschiedene reale Situationen berücksichtigen, wie zum Beispiel:
Durch welche Client-Laufumgebungen kann es eingeschränkt werden? Sind
dieselbe Versionsnummer?
Steht die Leistung in der Testumgebung im Einklang mit der Umgebung, in der die Anwendung ausgeführt wird?
Die Testergebnisse von Redis-Benchmark stellen einen Benchmark-Punkt dar, um sicherzustellen, dass Ihr Redis-Server nicht in einem abnormalen Zustand läuft, aber Sie sollten es niemals als echten „Stresstest“ betrachten “. Stresstests müssen widerspiegeln, wie die Anwendung ausgeführt wird, und benötigen eine Umgebung, die der Produktion möglichst ähnlich ist.
4. Hashes ist Ihre beste Wahl
Führen Sie Hashes auf elegante Weise ein. Hashes werden Ihnen ein beispielloses Erlebnis bescheren. Ich habe schon viele Schlüsselstrukturen gesehen, die den folgenden ähneln:
foo:first_name foo:last_name foo:address
Im obigen Beispiel kann foo der Benutzername eines Benutzers sein, wobei jedes Element ein ist separater Schlüssel. Dies erhöht den Spielraum für Fehler und unnötige Schlüssel. Verwenden Sie stattdessen Hash. Sie werden überrascht sein, dass Sie nur einen Schlüssel benötigen:
127.0.0.1:6379> HSET foo first_name "Joe" (integer) 1 127.0.0.1:6379> HSET foo last_name "Engel" (integer) 1 127.0.0.1:6379> HSET foo address "1 Fanatical Pl" (integer) 1 127.0.0.1:6379> HGETALL foo 1) "first_name" 2) "Joe" 3) "last_name" 4) "Engel" 5) "address" 6) "1 Fanatical Pl" 127.0.0.1:6379> HGET foo first_name "Joe"
5. Legen Sie die Überlebenszeit des Schlüsselwerts fest
Nutzen Sie nach Möglichkeit wichtige Auszeiten. Ein gutes Beispiel ist die Speicherung so etwas wie eines temporären Authentifizierungsschlüssels. Wenn Sie nach einem Autorisierungsschlüssel suchen – nehmen Sie OAUTH als Beispiel – erhalten Sie normalerweise eine Zeitüberschreitung. Stellen Sie auf diese Weise beim Festlegen des Schlüssels das gleiche Zeitlimit ein, und Redis löscht ihn automatisch für Sie! Es ist nicht mehr erforderlich, KEYS * zu verwenden, um alle Tasten zu durchlaufen.
6. Wählen Sie die passende Recyclingstrategie
Nachdem wir nun über das Thema Schlüsselräumung gesprochen haben, sprechen wir über die Recyclingstrategie. Wenn der Speicherplatz der Redis-Instanz voll ist, wird versucht, einige Schlüssel zurückzugewinnen. Abhängig von Ihrer Nutzung empfehle ich dringend die Verwendung der Volatile-lru-Strategie – vorausgesetzt, Sie haben ein Timeout für den Schlüssel festgelegt. Wenn Sie jedoch etwas Ähnliches wie einen Cache ausführen und keinen Timeout-Mechanismus für Schlüssel festlegen, können Sie die Verwendung des allkeys-lru-Recyclingmechanismus in Betracht ziehen. Mein Vorschlag ist, zunächst zu prüfen, was hier möglich ist.
7. Wenn Ihre Daten sehr wichtig sind, verwenden Sie bitte Try/Except
Wenn Sie sicherstellen müssen, dass kritische Daten in die Redis-Instanz eingefügt werden können, ist dies der Fall Es wird dringend empfohlen, dies in einen Try/Except-Block einzufügen. Da nahezu alle Redis-Clients die Strategie „Senden und Vergessen“ anwenden, muss häufig geprüft werden, ob ein Schlüssel tatsächlich in der Redis-Datenbank abgelegt wird. In diesem Artikel geht es nicht um die Komplexität der Einbindung von try/expect in Redis-Befehle. Sie müssen lediglich wissen, dass dadurch sichergestellt wird, dass wichtige Daten dort platziert werden, wo sie sein sollten.
8. Eine Instanz nicht erschöpfen
Wenn möglich, verteilen Sie die Arbeitslast auf mehrere Redis-Instanzen. Ab Version 3.0.0 unterstützt Redis Cluster. Mit Redis Cluster können Sie einige Schlüssel, die Master/Slave-Modi enthalten, basierend auf Schlüsselbereichen heraustrennen. Die komplette „Magie“ hinter Clustering finden Sie hier. Wenn Sie jedoch nach Tutorials suchen, sind Sie hier genau richtig. Wenn Clustering keine Option ist, ziehen Sie Namespaces in Betracht und verteilen Sie Ihre Schlüssel auf mehrere Instanzen. Zur Datenverteilung gibt es diesen hervorragenden Testbericht auf der Website redis.io.
9. Sind mehr Kerne besser?
Natürlich ist es falsch. Redis ist ein Single-Threaded-Prozess und verbraucht selbst bei aktivierter Persistenz nur maximal zwei Kerne. Es sei denn, Sie planen, mehrere Instanzen auf einem einzigen Host auszuführen – hoffentlich nur in einer Entwicklungs- und Testumgebung! ——Ansonsten sind nicht mehr als 2 Kerne für eine Redis-Instanz erforderlich.
10. Hohe Verfügbarkeit
Bisher wurde Redis Sentinel gründlich getestet und von vielen Benutzern in Produktionsumgebungen angewendet (einschließlich ObjectRocket). Wenn Ihre Anwendung stark auf Redis angewiesen ist, müssen Sie eine Hochverfügbarkeitslösung entwickeln, um sicherzustellen, dass sie nicht offline geht. Wenn Sie diese Dinge nicht selbst verwalten möchten, bietet ObjectRocket natürlich eine hochverfügbare Plattform und technischen Support rund um die Uhr. Wenn Sie interessiert sind, können Sie dies in Betracht ziehen.
Verwandte Empfehlungen:
Richtige Methode zum Entsperren der Redis-Sperre
Zusammenfassung der Redis-Optimierungserfahrungen
Zusammenfassung gängiger Methoden zum Betrieb von Redis in PHP
Das obige ist der detaillierte Inhalt vonZehn Tipps für den richtigen Einsatz von Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!