Heim  >  Artikel  >  Datenbank  >  Wie entferne ich Duplikate in Redis? Eine kurze Analyse von 4 Methoden zum Entfernen von Duplikaten

Wie entferne ich Duplikate in Redis? Eine kurze Analyse von 4 Methoden zum Entfernen von Duplikaten

青灯夜游
青灯夜游nach vorne
2021-11-09 10:03:467811Durchsuche

Wie entferne ich Duplikate in Redis? Der folgende Artikel stellt Ihnen vier Methoden der Redis-Deduplizierung vor. Ich hoffe, er wird Ihnen hilfreich sein!

Wie entferne ich Duplikate in Redis? Eine kurze Analyse von 4 Methoden zum Entfernen von Duplikaten

Dieser Artikel stellt hauptsächlich die gemeinsame Nutzung von drei Methoden zur eindeutigen Zählung in Redis vor. In diesem Artikel werden die drei Methoden basierend auf SET, basierend auf Bit und basierend auf HyperLogLog erläutert Die eindeutige Zählung der Website ist eine sehr häufige Funktion im System. Beispielsweise muss eine Website die Anzahl der eindeutigen Besucher (d. h. UV) zählen, die jeden Tag besucht werden. Zählprobleme kommen sehr häufig vor, können aber sehr kompliziert zu lösen sein: Erstens kann die Menge, die gezählt werden muss, sehr groß sein, beispielsweise wird eine große Website täglich von Millionen von Menschen besucht, und die Datenmenge ist sehr groß ziemlich groß; zweitens ist es normalerweise wünschenswert, die Dimension der Zählung zu erweitern. Beispielsweise möchte man zusätzlich zum täglichen UV-Wert auch den wöchentlichen oder monatlichen UV-Wert wissen, was die Berechnung sehr kompliziert macht. [Verwandte Empfehlung:

Redis-Video-Tutorial
]

In einem System, das in einer relationalen Datenbank gespeichert ist, ist die Methode zum Erreichen einer eindeutigen Zählung „select count(distinct )“ sehr einfach, aber wenn die Datenmenge groß ist groß, diese Anweisung wird ausgeführt. Es ist sehr langsam. Ein weiteres Problem bei der Verwendung relationaler Datenbanken besteht darin, dass die Leistung beim Einfügen von Daten nicht hoch ist.

Redis kann diese Art von Zählproblemen leicht lösen. Es ist schneller und verbraucht weniger Ressourcen als relationale Datenbanken. Es bietet sogar drei verschiedene Methoden.

1. Satz basierend auf Satz

Redis wird zum Speichern eines eindeutigen Datensatzes verwendet. Dadurch können Sie schnell feststellen, ob ein Element im Satz vorhanden ist, und Sie können auch schnell die Anzahl der Elemente in einem Satz berechnen . Darüber hinaus können Sammlungen zu einer neuen Sammlung zusammengeführt werden. Die beteiligten Befehle lauten wie folgt:

Kopieren Sie den Code wie folgt:

SISMEMBER key member  # 判断 member 是否存在
SADD key member  # 往集合中加入 member
SCARD key   # 获取集合元素个数

Die satzbasierte Methode ist einfach und effektiv, genau in der Zählung, weit verbreitet und leicht zu verstehen. Ihr Nachteil besteht darin, dass sie viele Ressourcen verbraucht (Natürlich ist es viel geringer als bei einer relationalen Datenbank.) Wenn die Anzahl der Elemente groß ist (z. B. Hunderte Millionen), ist der Speicherverbrauch schrecklich.

2. Bitbasiert auf Bit

Redis kann verwendet werden, um eine Zählung zu implementieren, die stärker komprimiert ist als der Satzspeicher. Es verwendet ein Bit 1 oder 0, um Informationen darüber zu speichern, ob ein Element vorhanden ist. Um beispielsweise einzelne Besucher einer Website zu zählen, kann user_id als Offset des Bits verwendet werden. Wenn es auf 1 gesetzt ist, bedeutet dies, dass ein Zugriff möglich ist. Sie können die Zugriffszahl für einen Tag speichern von mehr als 8 Millionen Nutzern. Die beteiligten Befehle lauten wie folgt: Kopieren Sie den Code wie folgt:
SETBIT key offset value  # 设置位信息
GETBIT key offset        # 获取位信息
BITCOUNT key [start end] # 计数
BITOP operation destkey key [key ...]  # 位图合并

Die bitbasierte Methode verbraucht viel weniger Platz als die Set-Methode, erfordert jedoch, dass die Elemente einfach auf Bit-Offsets abgebildet werden können und der anwendbare Bereich viel enger ist Der Verbrauch hängt vom maximalen Offset ab. Der Verschiebungsbetrag hat nichts mit dem Zählwert zu tun. Wenn der maximale Offset groß ist, ist der Speicherverbrauch beträchtlich.

3. Es ist schwierig, auf der Grundlage von HyperLogLog

eine genaue, eindeutige Zählung extrem großer Datenmengen zu erreichen, aber wenn es nur ungefähr ist, gibt es in der Informatik viele effiziente Algorithmen, unter denen HyperLogLog Counting sehr bekannt ist Mit dem Algorithmus ist es möglich, mit nur etwa 12 K Speicher Hunderte Millionen eindeutige Zählungen zu erreichen, und der Fehler wird auf etwa ein Prozent begrenzt. Die beteiligten Befehle lauten wie folgt: Kopieren Sie den Code wie folgt: rrree

Diese Zählmethode beinhaltet eine gewisse Gleichverteilung, Zufallswahrscheinlichkeit, Bernoulli-Verteilung usw. Wenn Sie interessiert sind, können Sie sie studieren Tiefe. Artikel.

Die drei von redis bereitgestellten einzigartigen Zählmethoden haben jeweils ihre eigenen Vor- und Nachteile und können die Zählanforderungen in verschiedenen Situationen vollständig erfüllen.

4. Basierend auf Bloomfilter

BloomFilter verwendet Datenstrukturen ähnlich wie Bitmaps oder Bitsets, um Daten präzise darzustellen, und kann schnell feststellen, ob ein Element in diesem Set bereits vorhanden ist. Obwohl BloomFilter nicht 100 % genau ist, kann die Fehlerrate durch Anpassen der Parameter, der Anzahl der verwendeten Hash-Funktionen und der Größe des Bit-Arrays reduziert werden. Durch diese Anpassung kann die Fehlerquote vollständig auf nahezu 0 reduziert werden. Es kann die meisten Szenarien erfüllen.

Wenn es eine Menge S = {x1, x2, … xn} gibt, verwendet Bloom Filter k unabhängige Hash-Funktionen, um jedes Element in der Menge dem Bereich von {1,…,m} zuzuordnen. Für jedes Element wird die zugeordnete Zahl als Index des entsprechenden Bit-Arrays verwendet und das Bit wird auf 1 gesetzt. Beispielsweise wird das Element x1 durch die Hash-Funktion auf die Zahl 8 abgebildet, dann wird das 8. Bit des Bit-Arrays auf 1 gesetzt. In der Abbildung unten hat die Menge S nur zwei Elemente x und y, die jeweils durch drei Hash-Funktionen abgebildet werden. Die abgebildeten Positionen sind (0, 3, 6) bzw. (4, 7, 10) und die entsprechenden Bits gesetzt wird. ist 1:

Wenn Sie nun feststellen möchten, ob sich ein anderes Element in dieser Menge befindet, müssen Sie nur durch diese drei Hash-Funktionen abgebildet werden, um zu sehen, ob an der entsprechenden Position eine 0 steht Das bedeutet also, dass dieses Element in dieser Menge sicherlich nicht existiert, sonst könnte es existieren. Wie entferne ich Duplikate in Redis? Eine kurze Analyse von 4 Methoden zum Entfernen von Duplikaten

Redis muss das Plug-in installieren, um den Bloom-Filter verwenden zu können: https://blog.csdn.net/u013030276/article/details/88350641.

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

Das obige ist der detaillierte Inhalt vonWie entferne ich Duplikate in Redis? Eine kurze Analyse von 4 Methoden zum Entfernen von Duplikaten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen