Zusammenfassung der Erfahrungen mit der Redis-Optimierung
In Bezug auf die Optimierung der Speicherverwaltung gibt Ihnen dieser Artikel hauptsächlich eine Zusammenfassung der Erfahrungen mit der Redis-Optimierung, in der Hoffnung, allen zu helfen.
Redis Hash ist ein HashMap innerhalb des Werts. Wenn die Anzahl der Mitglieder der Map relativ klein ist, wird ein kompaktes Format ähnlich einem eindimensionalen linearen Format zum Speichern der Map verwendet, wodurch der Speicheraufwand entfällt eine große Anzahl von Zeigern. Dieses Parametersteuerelement entspricht den folgenden zwei Elementen in der Konfigurationsdatei redis.conf:
hash-max-zipmap-entries 64 hash-max-zipmap-value 512
Wenn der Wert den internen Wert dieser Karte nicht überschreitet und der Wert 64 Mitglieder enthält, wird er im linearen Kompaktformat gespeichert. Der Standardwert ist 64, dh wenn der Wert weniger als 64 Mitglieder enthält Wenn der Wert diesen Wert überschreitet, wird er automatisch in eine echte HashMap umgewandelt.
hash-max-zipmap-value bedeutet, dass linearer Kompaktspeicher verwendet wird, um Platz zu sparen, wenn die Länge jedes Mitgliedswerts in der Wertzuordnung eine bestimmte Anzahl von Bytes nicht überschreitet.
Wenn eine der beiden oben genannten Bedingungen den festgelegten Wert überschreitet, wird sie in eine echte HashMap umgewandelt, wodurch kein Speicher mehr gespart wird. Die Antwort lautet also: Je größer der Wert, desto besser Nein. Der Vorteil von HashMap besteht darin, dass die Zeitkomplexität von Suche und Betrieb O(1) ist. Wenn Sie auf Hash verzichten und einen eindimensionalen Speicher verwenden, beträgt die Zeitkomplexität O(n). 🎜> Mitglieder sind dann klein Die Auswirkungen sind nicht groß, da sie sonst die Leistung ernsthaft beeinträchtigen. Daher muss die Einstellung dieses Werts im Allgemeinen abgewogen werden. Dies ist der grundlegendste Kompromiss zwischen Zeitkosten und Platzkosten.
list-max-ziplist-value 64 list-max-ziplist-entries 512
Die Knotenwertgröße des Listendatentyps ist kleiner als die Anzahl der Bytes. Es wird das kompakte Speicherformat Listendatentyp verwendet ist kleiner als die Anzahl der Knoten. Es wird ein kompaktes Speicherformat ohne Zeiger verwendet.
Speichervorabzuweisung:
Die interne Implementierung von Redis hat nicht viel zur Optimierung der Speicherzuweisung beigetragen (im Vergleich zu Memcache wird es bis zu einem gewissen Grad eine Speicherfragmentierung geben, aber in den meisten Fällen ist dies der Fall). Dies geschieht jedoch nicht zum Leistungsengpass von Redis. Wenn die meisten in Redis gespeicherten Daten jedoch numerisch sind, verwendet Redis intern eine gemeinsame Ganzzahl, um den Overhead für die Speicherzuweisung zu sparen Weist einen Wert von 1 bis n zu. Dann werden mehrere numerische Objekte in einen Pool gelegt. Wenn die gespeicherten Daten zufällig innerhalb dieses numerischen Bereichs liegen, wird das Objekt direkt aus dem Pool entnommen und durch Referenzzählung gemeinsam genutzt Die Werte werden im System gespeichert und können bis zu einem gewissen Grad die Leistung verbessern. Die Einstellung dieses Parameters erfordert die Änderung einer Zeile der Makrodefinition REDIS_SHARED_INTEGERS. Der Standardwert ist 10000 Ändern Sie es entsprechend Ihren eigenen Anforderungen.
Persistenzmechanismus:
Reguläre Snapshot-Methode (Snapshot):
Diese Persistenzmethode ist eigentlich ein Timer-Ereignis in Redis, das zu jedem festgelegten Zeitpunkt die aktuelle Situation überprüft Ob die Nummer und der Zeitpunkt der Datenänderungen erfüllen die konfigurierten Persistenz-Triggerbedingungen. Wenn dies der Fall ist, wird über den Fork-Aufruf des Betriebssystems ein untergeordneter Prozess erstellt, der standardmäßig denselben Adressraum mit dem übergeordneten Prozess teilt Der gesamte Speicher wird durch den untergeordneten Prozess durchlaufen, um Speichervorgänge auszuführen, während der Hauptprozess weiterhin Dienste bereitstellen kann. Bei einem Schreibvorgang führt das Betriebssystem eine Kopie beim Schreiben in Einheiten von Speicherseiten durch, um sicherzustellen, dass keine Verbindung besteht zwischen den übergeordneten und untergeordneten Prozessen beeinflussen sich gegenseitig.
Der Hauptnachteil dieser Persistenz besteht darin, dass der geplante Snapshot nur das Speicherabbild innerhalb eines bestimmten Zeitraums darstellt, sodass bei einem Systemneustart alle Daten zwischen dem letzten Snapshot und dem Neustart verloren gehen.
Anweisungsbasierte Anhängemethode (aof):
Die aof-Methode ähnelt tatsächlich der anweisungsbasierten Binlog-Methode von MySQL, das heißt, jeder Befehl, der Redis-Speicherdaten ändert, wird an a angehängt Protokolldatei, was bedeutet, dass diese Protokolldatei die persistenten Daten von Redis sind.
Der Hauptnachteil der aof-Methode besteht darin, dass das Anhängen der Protokolldatei zu groß werden kann. Wenn das System zum Wiederherstellen von Daten neu gestartet wird, kann das Laden der Daten mit der aof-Methode sehr langsam sein Das Laden von Dutzenden Gigabyte an Daten dauert mehrere Stunden. Dies liegt natürlich nicht daran, dass die Lesegeschwindigkeit der Festplattendatei langsam ist, sondern daran, dass alle gelesenen Befehle im Speicher ausgeführt werden müssen. Da für jeden Befehl ein Protokoll geschrieben werden muss, wird außerdem die Lese- und Schreibleistung von Redis bei Verwendung von aof verringert.
Sie können erwägen, Daten auf verschiedenen Redis-Instanzen zu speichern. Dadurch wird vermieden, dass Eier in einen Korb gelegt werden, was nicht nur die Auswirkungen von Cache-Fehlern auf das System verringern kann Dies kann die Datenwiederherstellung beschleunigen, bringt aber auch eine gewisse Komplexität in das Systemdesign mit sich.
Redis-Persistenz-Absturzproblem:
Personen mit Redis-Online-Betriebs- und Wartungserfahrung werden feststellen, dass Redis auftritt, wenn die physische Speichernutzung relativ groß ist, aber die tatsächliche gesamte physische Speicherkapazität nicht überschritten hat. Einige Leute glauben, dass das Problem der Instabilität oder sogar des Absturzes durch die Verdoppelung der Speichernutzung aufgrund des auf Snapshot-Persistenz basierenden Fork-Systemaufrufs verursacht wird. Diese Ansicht ist ungenau, da der Copy-on-Write-Mechanismus des Fork-Aufrufs darauf basiert In dieser Einheit werden also nur fehlerhafte Seiten kopiert, aber im Allgemeinen werden nicht alle Seiten in kurzer Zeit geschrieben, was zum Absturz von Redis führt.
Die Antwort ist, dass Redis-Persistenz Buffer IO verwendet. Das sogenannte Buffer IO bedeutet, dass Redis den physischen Speicher-Page-Cache für Schreib- und Lesevorgänge an persistenten Dateien verwendet, während die meisten Datenbanksysteme Direct IO verwenden, um diese Schicht zu umgehen Wenn die Redis-Persistenzdatei (insbesondere die Snapshot-Datei) zu groß ist, werden die Daten in der Festplattendatei beim Lesen und Schreiben in den physischen Speicher geladen Cache für die Datei im Betriebssystem, die Daten in dieser Cache-Schicht und die im Redis-Speicher verwalteten Daten werden tatsächlich wiederholt gespeichert. Obwohl der Kernel die Arbeit des Entfernens des Seitencaches übernimmt, wenn der physische Speicher knapp ist Wenn Sie der Meinung sind, dass ein bestimmter Seiten-Cache wichtiger ist, und Ihren Prozess Swap starten lassen, wird Ihr System instabil oder stürzt ab. Wir haben die Erfahrung gemacht, dass es gefährlicher wird, wenn die Nutzung Ihres physischen Redis-Speichers 3/5 der gesamten Speicherkapazität überschreitet.
Zusammenfassung:
1. Wählen Sie den geeigneten Datentyp entsprechend den Geschäftsanforderungen und legen Sie entsprechende kompakte Speicherparameter für verschiedene Anwendungsszenarien fest.
2. Wenn das Geschäftsszenario keine Datenpersistenz erfordert, kann das Ausschalten aller Persistenzmethoden die beste Leistung und maximale Speichernutzung erzielen.
3. Wenn Sie Persistenz verwenden müssen, wählen Sie zwischen der Snapshot-Methode und der Anweisungsanhänge-Methode, je nachdem, ob Sie den Verlust einiger Daten nach dem Neustart tolerieren können. Verwenden Sie keine virtuellen Speicher- und Diskstore-Methoden.
4. Lassen Sie nicht zu, dass die physische Speichernutzung Ihrer Redis-Maschine 3/5 des gesamten tatsächlichen Speichers überschreitet.
Die Option „maxmemory“ in redis.conf weist Redis an, nachfolgende Schreibanforderungen abzulehnen, sobald der physische Speicher verwendet wird. Dieser Parameter kann Ihren Redis gut vor der Verwendung schützen. Übermäßiger physischer Speicher führt zu Auslagerungen kann schließlich die Leistung ernsthaft beeinträchtigen oder sogar abstürzen.
VM-aktiviert in der redis.conf-Datei ist nein
Verwandte Empfehlungen:
Zusammenfassung der Verwendung der Redis-Funktion in PHP
Vollständige Aufzeichnung der Redis-Clusterkonstruktion
Zusammenfassung gängiger Methoden zum Betrieb von Redis in PHP
Das obige ist der detaillierte Inhalt vonZusammenfassung der Erfahrungen mit der Redis-Optimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

So löschen Sie Redis -Daten: Verwenden Sie den Befehl Flushall, um alle Schlüsselwerte zu löschen. Verwenden Sie den Befehl flushdb, um den Schlüsselwert der aktuell ausgewählten Datenbank zu löschen. Verwenden Sie SELECT, um Datenbanken zu wechseln, und löschen Sie dann FlushDB, um mehrere Datenbanken zu löschen. Verwenden Sie den Befehl del, um einen bestimmten Schlüssel zu löschen. Verwenden Sie das Redis-Cli-Tool, um die Daten zu löschen.

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

Der beste Weg, um Redis -Quellcode zu verstehen, besteht darin, Schritt für Schritt zu gehen: Machen Sie sich mit den Grundlagen von Redis vertraut. Wählen Sie ein bestimmtes Modul oder eine bestimmte Funktion als Ausgangspunkt. Beginnen Sie mit dem Einstiegspunkt des Moduls oder der Funktion und sehen Sie sich die Codezeile nach Zeile an. Zeigen Sie den Code über die Funktionsaufrufkette an. Kennen Sie die von Redis verwendeten Datenstrukturen. Identifizieren Sie den von Redis verwendeten Algorithmus.

Um alle Schlüssel in Redis anzuzeigen, gibt es drei Möglichkeiten: Verwenden Sie den Befehl keys, um alle Schlüssel zurückzugeben, die dem angegebenen Muster übereinstimmen. Verwenden Sie den Befehl scan, um über die Schlüssel zu iterieren und eine Reihe von Schlüssel zurückzugeben. Verwenden Sie den Befehl Info, um die Gesamtzahl der Schlüssel zu erhalten.

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

Um eine Warteschlange aus Redis zu lesen, müssen Sie den Warteschlangenname erhalten, die Elemente mit dem Befehl LPOP lesen und die leere Warteschlange verarbeiten. Die spezifischen Schritte sind wie folgt: Holen Sie sich den Warteschlangenname: Nennen Sie ihn mit dem Präfix von "Warteschlange:" wie "Warteschlangen: My-Queue". Verwenden Sie den Befehl LPOP: Wischen Sie das Element aus dem Kopf der Warteschlange aus und geben Sie seinen Wert zurück, z. B. die LPOP-Warteschlange: my-queue. Verarbeitung leerer Warteschlangen: Wenn die Warteschlange leer ist, gibt LPOP NIL zurück, und Sie können überprüfen, ob die Warteschlange existiert, bevor Sie das Element lesen.
