So verwenden Sie den HyperLogLog-Algorithmus von Redis
Sie lassen gerne nach, aber der Produktmanager schickt Ihnen ein Anforderungsdokument per E-Mail. Das Unternehmen muss langfristige Statistiken über die täglichen Besucher-IPs der Website führen, und die statistische Zeitspanne kann Monate oder sogar Jahre dauern.
Nachdem Sie die Anforderungen gelesen haben, werden Sie denken, dass dies so einfach ist. Sie können diese Funktion einfach mit dem Sammlungstyp von Redis implementieren: Generieren Sie jeden Tag einen Sammlungstypschlüssel, verwenden Sie SADD, um die tägliche Besucher-IP zu speichern, und verwenden Sie den SCARD-Befehl um einfach die tägliche Besucher-IP zu erhalten.
Sie haben den Code schnell eingegeben, den Test bestanden und diese Funktion wurde gestartet. Nachdem Sie eine Weile online gegangen sind, werden Sie feststellen, dass der Server, auf dem sich Redis befindet, einen Alarm auslöst. Der Grund dafür ist, dass die Speichernutzung einiger Schlüssel zu groß ist. Sie haben einen Blick darauf geworfen und festgestellt, dass es sich bei diesen Schlüsseln um festgelegte Schlüssel handelt die Besucher-IPs speichern. Erst dann tätschelten Sie Ihren Kopf und wussten, dass Sie sich ein großes Loch gegraben hatten.
Gehen Sie davon aus, dass das Speichern einer IP-Adresse im IPv4-Format bis zu 15 Bytes erfordert und die Website bis zu 1 Million Besucher pro Tag hat. Diese festgelegten Schlüssel verbrauchen 0,45 GB Speicher pro Monat und 5,4 GB Speicher pro Jahr. Dies ist nur eine Schätzung des IPv4-Formats, wenn das IPv6-Format mehr Speicher belegt. Obwohl die Zeitkomplexität von SADD und SCARD O(1) ist, ist ihr Speicherverbrauch unerträglich.
Sie haben die offizielle Website von Redis durchsucht und festgestellt, dass Redis auch einen Datentyp HyperLogLog bereitstellt, der nicht nur die Anforderungen des Produkts erfüllen kann, sondern auch weniger Speicher belegt.
HyperLogLog-Algorithmus
HyperLogLog ist ein probabilistischer Algorithmus, der speziell für die Berechnung der Kardinalität einer Menge entwickelt wurde. Er kann die ungefähre Kardinalität einer bestimmten Menge berechnen.
Die ungefähre Kardinalität ist nicht die tatsächliche Kardinalität der Menge. Sie kann etwas kleiner oder größer sein als die tatsächliche Kardinalität, aber der Fehler zwischen der geschätzten Kardinalität und der tatsächlichen Kardinalität liegt in einem angemessenen Bereich erfordern sehr genaue Sie können den HyperLogLog-Algorithmus verwenden.
Der Vorteil von HyperLogLog besteht darin, dass sich der Speicherbedarf für die Berechnung der ungefähren Kardinalität aufgrund der Größe des Satzes nicht ändert. Unabhängig davon, wie viele Elemente der Satz enthält, ist der für die Berechnung von HyperLogLog erforderliche Speicher immer fest und sehr gering. .
Redis benötigt nur 12 KB Speicher pro HyperLogLog-Typ, um nahezu 264 Elemente zu zählen, während der Standardfehler des Algorithmus nur 0,81 % beträgt.
Wenn Sie den HyperLogLog-Typ verwenden, um die oben genannten Funktionen zu implementieren, werden bei 1 Million Besuchern pro Tag in einem Monat nur 360 KB Speicher belegt.
PFADD
Der PFADD-Befehl kann ein oder mehrere gegebene Mengenelemente zählen.
PFADD-Schlüsselelement [Element...]
PFADD key element [element...]
根据给定的元素是否已经进行过计数,PFADD 命令可能返回 0,也可能返回 1:
如果给定的所有元素都已经进行过计数,那么 PFADD 命令将返回 0,表示 HyperLogLog 计算出的近似基数没有发生变化。
如果给定的元素中出现了至少一个之前没有进行过计数的元素,导致 HyperLogLog 计算出的近似基数发生了变化,那么 PFADD 命令将返回 1。
例如:
redis> PFADD letters a b c -- 第一次添加 (integer) 1 redis> PFADD letters a -- 第二次添加 (integer) 0
如果在调用该命令时仅指定 key 而不指定元素也是可以的,如果 key 存在,则不会有任何操作,如果不存在,则会创建一个数据结构(返回 1)。
PFCOUNT
使用 PFCOUNT 命令可以获取基于 HyperLogLog 近似计算的集合基数。若给定的 key 不存在将返回 0。
PFCOUNT key [key...]
例如:
redis> PFCOUNT letters (integer) 3
当向 PFCOUNT 传入多个 HyperLogLog 时,PFCOUNT 命令将先对所有的 HyperLogLog 求并集,然后返回近似基数。
redis> PFADD letters1 a b c (integer) 1 redis> PFADD letters2 c d e (integer) 1 redis> PFCOUNT letters1 letters2 (integer) 5
PFMERGE
PFMERGE 命令可以对多个 HyperLogLog 执行并集计算,然后把计算得出的并集 HyperLogLog 保存到指定的键中。
PFMERGE destKey sourceKey [sourceKey...]
- Wenn sich die von HyperLogLog berechnete ungefähre Kardinalität aufgrund des Vorhandenseins von mindestens einem Element im angegebenen Element ändert, das zuvor nicht gezählt wurde, gibt der PFADD-Befehl 1 zurück.
Zum Beispiel:
redis> PFADD letters1 a b c (integer) 1 redis> PFADD letters2 c d e (integer) 1 redis> PFMERGE res letters1 letters2 OK redis> PFCOUNT res (integer) 5
PFCOUNT
PFCOUNT key [key...]
🎜🎜Zum Beispiel: 🎜rrreee🎜Wenn mehrere HyperLogLogs an PFCOUNT übergeben werden, findet der PFCOUNT-Befehl zuerst die Vereinigung aller HyperLogLogs und gibt dann den ungefähren Wert zurück Basis. Der Befehl 🎜rrreee🎜PFMERGE🎜🎜🎜PFMERGE kann eine Vereinigungsberechnung für mehrere HyperLogLogs durchführen und dann das berechnete Union-HyperLogLog im angegebenen Schlüssel speichern. 🎜🎜PFMERGE destKey sourceKey [sourceKey...]
🎜🎜Wenn der angegebene Schlüssel bereits vorhanden ist, überschreibt der Befehl PFMERGE den vorhandenen Schlüssel. 🎜rrreee🎜Sie können sehen, dass die Befehle PFMERGE und PFCOUNT sehr ähnlich sind. Tatsächlich führt der Befehl PFCOUNT die folgenden Operationen aus, wenn er die ungefähre Kardinalität mehrerer HyperLogLogs berechnet: 🎜🎜🎜🎜Der Befehl PFMERGE wird intern aufgerufen, um die Vereinigung von zu berechnen alle angegebenen HyperLogLogs und speichern Sie diese Vereinigung in einem temporären HyperLogLog. 🎜🎜🎜🎜Führen Sie den Befehl PFCOUNT für das temporäre HyperLogLog aus, um dessen ungefähre Kardinalität zu erhalten. 🎜🎜🎜🎜Temporäres HyperLogLog löschen. 🎜🎜🎜🎜Gibt die resultierende ungefähre Basis zurück. 🎜
Wenn das Programm den Befehl PFCOUNT für mehrere HyperLogLogs aufrufen muss und dieser Aufruf möglicherweise mehrmals wiederholt wird, können Sie diesen Aufruf durch den entsprechenden Aufruf des Befehls PFMERGE ersetzen: indem Sie das Ergebnis der Vereinigungsberechnung im angegebenen Speicherort speichern, anstatt es neu zu berechnen Wenn Sie in HyperLogLog jedes Mal die Vereinigung durchführen, kann das Programm unnötige Vereinigungsberechnungen minimieren.
Geschäftsszenarien
Die Funktionen von HyperLogLog eignen sich sehr gut für: Zählung (monatliche, jährliche Statistiken), Deduplizierung (Spam-SMS-Erkennung) und andere Szenarien.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie den HyperLogLog-Algorithmus von Redis. 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

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.

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 Operationen zu sperren, muss die Sperre durch den Befehl setNX erfasst werden und dann den Befehl Ablauf verwenden, um die Ablaufzeit festzulegen. Die spezifischen Schritte sind: (1) Verwenden Sie den Befehl setNX, um zu versuchen, ein Schlüsselwertpaar festzulegen; (2) Verwenden Sie den Befehl Ablauf, um die Ablaufzeit für die Sperre festzulegen. (3) Verwenden Sie den Befehl Del, um die Sperre zu löschen, wenn die Sperre nicht mehr benötigt wird.

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.

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.

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.

Redis unterstützt als Messing Middleware Modelle für Produktionsverbrauch, kann Nachrichten bestehen und eine zuverlässige Lieferung sicherstellen. Die Verwendung von Redis als Message Middleware ermöglicht eine geringe Latenz, zuverlässige und skalierbare Nachrichten.
