So implementieren Sie Redis mit HyperLogLog
1. Übersicht
Redis hat in Version 2.8.9 die HyperLogLog-Datenstruktur hinzugefügt, die für Kardinalitätsstatistiken verwendet wird. Der Vorteil besteht darin, dass der zur Berechnung der Kardinalität erforderliche Platz relativ klein ist im Allgemeinen relativ konstant.
In Redis kostet jeder HyperLogLog-Schlüssel nur 12 KB Speicher, um die Kardinalität von fast 2^64 verschiedenen Elementen zu berechnen. Dies steht in scharfem Gegensatz zur Berechnung der Kardinalität, bei der eine Sammlung mit mehr Elementen mehr Speicher verbraucht. Da HyperLogLog die Kardinalität jedoch nur anhand der Eingabeelemente berechnet und die Eingabeelemente selbst nicht speichert, kann HyperLogLog nicht wie eine Sammlung einzelne Elemente der Eingabe zurückgeben.
2. Was ist die Kardinalität?
Zum Beispiel ist der Datensatz {1, 3, 5, 7, 5, 7, 8}, dann ist der Kardinalitätssatz dieses Datensatzes {1, 3, 5,7 , 8}, die Kardinalität (sich nicht wiederholende Elemente) beträgt 5. Bei der Kardinalitätsschätzung geht es darum, die Kardinalität schnell innerhalb des akzeptablen Fehlerbereichs zu berechnen.
3. Befehle
Derzeit werden nur drei Befehle, PFADD, PFCOUNT und PFMERGE, von HyperLogLog unterstützt. Lassen Sie uns sie zunächst einzeln vorstellen.
3.1 PFADD
Früheste verfügbare Version: 2.8.9. Zeitkomplexität: O(1). Der Befehl
PFADD kann Elemente (mehrere Elemente können angegeben werden) zur HyperLogLog-Datenstruktur hinzufügen und sie in dem durch den ersten Parameterschlüssel angegebenen Schlüssel speichern. Gibt 1 zurück, wenn sich die Kardinalitätsschätzung (Anzahl der ausgewerteten Elemente) geändert hat, andernfalls wird 0 zurückgegeben, d. h. um zu bestätigen, ob sich die Kardinalitätsschätzung nach der Ausführung des Befehls geändert hat. Wenn der angegebene Schlüssel nicht vorhanden ist, wird eine leere HyperLogLog-Datenstruktur erstellt (d. h. ein Redis-String mit der angegebenen String-Länge und -Codierung). Es ist auch möglich, den Befehl ohne Angabe eines Elementparameters und nur mit Angabe des Schlüssels aufzurufen. Wenn der Schlüssel vorhanden ist, tun Sie nichts und geben Sie 0 zurück. Wenn der Schlüssel nicht vorhanden ist, wird ein neuer HyperLogLog-Datenknoten erstellt und 1 zurückgegeben. Im Wesentlichen wird lediglich eine neue HyperLogLog-Datenstruktur generiert, ohne dass Elemente gespeichert werden.
(1) Syntaxformat:
PFADD key element [element ...]
(2) Rückgabewert:
Ganzzahl, wenn mindestens ein Element hinzugefügt wird, wird 1 zurückgegeben, andernfalls wird 0 zurückgegeben.
(3) Beispiel:
127.0.0.1:6379> PFADD hll a b c d e f g (integer) 1 127.0.0.1:6379> pfcount hll (integer) 7
3.2 PFCOUNT
Früheste verfügbare Version: 2.8.9. Zeitkomplexität: O(1). Für mehrere relativ große Schlüssel beträgt die Zeitkomplexität O(N).
Verwenden Sie den Befehl PFCOUNT, um einen geschätzten HyperLogLog-Kardinalitätswert (d. h. die Anzahl der Elemente) zu erhalten. Dieser Befehl gibt 0 zurück, wenn der Schlüssel nicht existiert, andernfalls gibt er eine Schätzung der Kardinalität des Schlüssels zurück. Bei mehreren Schlüsseln wird eine Kardinalitätsschätzung für die Vereinigung mehrerer HyperLogLogs zurückgegeben, die durch Zusammenführen mehrerer HyperLogLogs zu einem temporären HyperLogLog berechnet wird. Mit einer minimalen und konsistenten Speichermenge kann HyperLogLog die Anzahl der eindeutigen Elemente einer Sammlung zählen. Jedes HyperLogLog verwendet nur 12 KB plus ein paar Bytes des Schlüssels selbst.
(1) Syntaxformat:
PFCOUNT key [key ...]
(2) Rückgabewert:
integer, gibt die Kardinalitätsschätzung des angegebenen HyperLogLogs zurück. Wenn mehrere HyperLogLogs vorhanden sind, wird die Kardinalitätsschätzung der Union zurückgegeben.
(3) Beispiel:
127.0.0.1:6379> PFADD hll foo bar zap (integer) 1 127.0.0.1:6379> PFADD hll zap zap zap (integer) 0 127.0.0.1:6379> PFADD hll foo bar (integer) 0 127.0.0.1:6379> PFCOUNT hll (integer) 3 127.0.0.1:6379> PFADD some-other-hll 1 2 3 (integer) 1 127.0.0.1:6379> PFCOUNT some-other-hll (integer) 3 127.0.0.1:6379> PFCOUNT hll some-other-hll (integer) 6
(4) Einschränkung: Die von
HyperLogLog zurückgegebenen Ergebnisse sind nicht genau und die Fehlerquote beträgt etwa 0,81 %.
Mit diesem Befehl wird HyperLogLog geändert und 8 Bytes zum Speichern der zuletzt berechneten Basis verwendet. Technisch gesehen ist PFCOUNT also ein Schreibbefehl.
(5) Leistungsprobleme
Auch wenn die Verarbeitung eines intensiven HyperLogLog theoretisch länger dauert, weist der Befehl PFCOUNT immer noch eine hohe Leistung auf, wenn nur ein Schlüssel angegeben wird. Dies liegt daran, dass PFCOUNT die Basis der letzten Berechnung zwischenspeichert und sich diese Basis nicht ständig ändert, da der Befehl PFADD das Register in den meisten Fällen nicht aktualisiert. Daher kann der Effekt von Hunderten von Anfragen pro Sekunde erzielt werden.
Wenn Sie den Befehl PFCOUNT verwenden, um mehrere Schlüssel zu verarbeiten, wird HyperLogLog zusammengeführt. Noch wichtiger ist, dass die berechnete Kardinalität der Vereinigung nicht zwischengespeichert werden kann. Bei Verwendung mehrerer Schlüssel kann die Ausführung von PFCOUNT einige Zeit dauern (normalerweise in der Größenordnung von Millisekunden), daher wird eine übermäßige Verwendung nicht empfohlen.
Es ist zu beachten, dass die Einzelschlüssel- und Mehrschlüssel-Ausführungssemantik dieses Befehls unterschiedlich ist und eine unterschiedliche Leistung aufweist. Eine übermäßige Verwendung der Mehrschlüssel-Ausführungssemantik wird nicht empfohlen.
3.3 PFMERGE
Früheste verfügbare Version: 2.8.9. Zeitkomplexität: O(N), N ist die Anzahl der zusammenzuführenden HyperLogLogs.
Mehrere HyperLogLogs können über den Befehl PFMERGE zu einem HyperLogLog zusammengeführt werden. Die Kardinalitätsschätzung des zusammengeführten HyperLogLog wird berechnet, indem die Vereinigung aller gegebenen HyperLogLogs gebildet wird. Das berechnete Ergebnis wird auf dem angegebenen Schlüssel gespeichert.
Syntaxformat:
PFMERGE destkey sourcekey [sourcekey ...]
Rückgabewert:
Rückgabe OK.
Beispiel:
127.0.0.1:6379> PFADD hll1 foo bar zap a (integer) 1 127.0.0.1:6379> PFADD hll2 a b c foo (integer) 1 127.0.0.1:6379> PFMERGE hll3 hll1 hll2 OK 127.0.0.1:6379> PFCOUNT hll3 (integer) 6
Das obige ist der detaillierte Inhalt vonSo implementieren Sie Redis mit HyperLogLog. 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

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.

Schritte zur Lösung des Problems, das Redis-Server nicht finden kann: Überprüfen Sie die Installation, um sicherzustellen, dass Redis korrekt installiert ist. Setzen Sie die Umgebungsvariablen Redis_host und Redis_port; Starten Sie den Redis-Server Redis-Server; Überprüfen Sie, ob der Server Redis-Cli Ping ausführt.

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.

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.

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).

Um die Redis -Versionsnummer anzuzeigen, können Sie die folgenden drei Methoden verwenden: (1) Geben Sie den Info -Befehl ein, (2) Starten Sie den Server mit der Option --version und (3) die Konfigurationsdatei anzeigen.

Es gibt zwei Arten von RETIS-Datenverlaufstrategien: regelmäßige Löschung: periodischer Scan zum Löschen des abgelaufenen Schlüssels, der über abgelaufene Cap-Remove-Count- und Ablauf-Cap-Remove-Delay-Parameter festgelegt werden kann. LAZY LELETION: Überprüfen Sie nur, ob abgelaufene Schlüsseln gelöscht werden, wenn Tasten gelesen oder geschrieben werden. Sie können durch LazyFree-Lazy-Eviction, LazyFree-Lazy-Expire, LazyFree-Lazy-User-Del-Parameter eingestellt werden.
