Inhaltsverzeichnis
HyperLogLog-Algorithmus
PFADD
PFCOUNT
PFMERGE
🎜PFMERGE🎜🎜🎜PFMERGE kann die 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. 🎜
Geschäftsszenarien
Heim Datenbank Redis Eine kurze Analyse des Lernens von HyperLogLog für Redis-Datentypen

Eine kurze Analyse des Lernens von HyperLogLog für Redis-Datentypen

Jan 21, 2022 am 10:00 AM
hyperloglog redis 数据类型

Dieser Artikel wird Ihnen helfen, den HyperLogLog im Redis-Datentyp zu verstehen, der normalerweise zum Zählen der Anzahl eindeutiger Elemente in einer Sammlung verwendet wird. Ich hoffe, er wird Ihnen hilfreich sein!

Eine kurze Analyse des Lernens von HyperLogLog für Redis-Datentypen

Heute ist Freitag, Sie fischen fröhlich und der Produktmanager sendet Ihnen ein Anforderungsdokument per E-Mail. Die Nachfrage ist wahrscheinlich: Das Unternehmen muss die täglichen Besucher-IPs der Website zählen, und diese Statistik ist ein langfristiges Verhalten, das von einigen Monaten bis zu einigen Jahren reicht.

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 ganz 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 inakzeptabel.

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. [Verwandte Empfehlungen: Redis-Video-Tutorial]

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
Nach dem Login kopieren

如果在调用该命令时仅指定 key 而不指定元素也是可以的,如果 key 存在,则不会有任何操作,如果不存在,则会创建一个数据结构(返回 1)。

PFCOUNT

通过 PFCOUNT 命令可以获取 HyperLogLog 为集合计算出的近似基数。若给定的 key 不存在将返回 0。

PFCOUNT key [key...]

例如:

redis> PFCOUNT letters
(integer) 3
Nach dem Login kopieren

当向 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
Nach dem Login kopieren

PFMERGE

PFMERGE 命令可以对多个 HyperLogLog 执行并集计算,然后把计算得出的并集 HyperLogLog 保存到指定的键中。

PFMERGE destKey sourceKey [sourceKey...]

Je nachdem, ob das angegebene Element gezählt wurde, kann der PFADD-Befehl 0 oder 1 zurückgeben:

    Wenn angegeben, haben alle Elemente von have gezählt wurde, gibt der PFADD-Befehl 0 zurück, was darauf hinweist, dass sich die von HyperLogLog berechnete ungefähre Kardinalität nicht geändert hat.

    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
      Nach dem Login kopieren
      Es ist auch möglich, beim Aufrufen dieses Befehls nur den Schlüssel anzugeben, ohne das Element anzugeben. Wenn der Schlüssel vorhanden ist, wird keine Operation ausgeführt wird erstellt (Return 1).

    • PFCOUNT

    • Verwenden Sie den Befehl PFCOUNT, um die von HyperLogLog berechnete ungefähre Kardinalität für den Satz zu erhalten. Wenn der angegebene Schlüssel nicht existiert, wird 0 zurückgegeben.
    • 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 die 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.

      Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Programmierung! !

      Das obige ist der detaillierte Inhalt vonEine kurze Analyse des Lernens von HyperLogLog für Redis-Datentypen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    So erstellen Sie den Redis -Clustermodus So erstellen Sie den Redis -Clustermodus Apr 10, 2025 pm 10:15 PM

    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 So löschen Sie Redis -Daten Apr 10, 2025 pm 10:06 PM

    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.

    So lesen Sie Redis -Warteschlange So lesen Sie Redis -Warteschlange Apr 10, 2025 pm 10:12 PM

    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.

    So verwenden Sie den Befehl Redis So verwenden Sie den Befehl Redis Apr 10, 2025 pm 08:45 PM

    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 verwenden Sie Redis Lock So verwenden Sie Redis Lock Apr 10, 2025 pm 08:39 PM

    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.

    So lesen Sie den Quellcode von Redis So lesen Sie den Quellcode von Redis Apr 10, 2025 pm 08:27 PM

    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.

    So lösen Sie Datenverlust mit Redis So lösen Sie Datenverlust mit Redis Apr 10, 2025 pm 08:24 PM

    Zu den Ursachen für Datenverluste gehören Speicherausfälle, Stromausfälle, menschliche Fehler und Hardwarefehler. Die Lösungen sind: 1. Speichern Sie Daten auf Festplatten mit RDB oder AOF Persistenz; 2. Kopieren Sie auf mehrere Server, um eine hohe Verfügbarkeit zu erhalten. 3. Ha mit Redis Sentinel oder Redis Cluster; 4. Erstellen Sie Schnappschüsse, um Daten zu sichern. 5. Implementieren Sie Best Practices wie Persistenz, Replikation, Schnappschüsse, Überwachung und Sicherheitsmaßnahmen.

    So verwenden Sie die Befehlszeile der Redis So verwenden Sie die Befehlszeile der Redis Apr 10, 2025 pm 10:18 PM

    Verwenden Sie das Redis-Befehlszeilen-Tool (REDIS-CLI), um Redis in folgenden Schritten zu verwalten und zu betreiben: Stellen Sie die Adresse und den Port an, um die Adresse und den Port zu stellen. Senden Sie Befehle mit dem Befehlsnamen und den Parametern an den Server. Verwenden Sie den Befehl Hilfe, um Hilfeinformationen für einen bestimmten Befehl anzuzeigen. Verwenden Sie den Befehl zum Beenden, um das Befehlszeilenwerkzeug zu beenden.

    See all articles