Heim >Backend-Entwicklung >PHP-Tutorial >3 Möglichkeiten zur Implementierung der eindeutigen Zählung in Redis
Eindeutiges Zählen ist eine sehr häufige Funktion in Website-Systemen. Beispielsweise muss eine Website die Anzahl der einzelnen Besucher (auch als UV bezeichnet) zählen, die sie jeden Tag besuchen. 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.
In einem relationalen Datenbankspeichersystem ist die Methode zum Erreichen einer eindeutigen Zählung select count(distinct 9582cf303f30b9f4319d93f9b5ae353f). Dies ist sehr einfach, aber wenn die Datenmenge groß ist, ist die Ausführung dieser Anweisung erforderlich sehr langsam. Ein weiteres Problem bei der Verwendung relationaler Datenbanken besteht darin, dass die Leistung beim Einfügen von Daten nicht hoch ist.
Redis löst diese Art von Zählproblemen sehr einfach. Es ist schneller und verbraucht weniger Ressourcen als relationale Datenbanken. Es bietet sogar drei verschiedene Methoden.
1. Set basierend auf Set
Mit Redis können Sie schnell feststellen, ob ein Element im Set vorhanden ist, und es auch schnell berechnen Elemente einer bestimmten Menge zusätzlich und können zu einer neuen Menge zusammengeführt werden. Die beteiligten Befehle sind wie folgt:
SISMEMBER key member # 判断 member 是否存在 SADD key member # 往集合中加入 member SCARD key # 获取集合元素个数
Die satzbasierte Methode ist einfach und effektiv, verfügt über eine genaue Zählung, eine breite Anwendung und ist leicht zu verstehen. Ihr Nachteil besteht darin, dass sie viele Ressourcen verbraucht (. Natürlich ist es viel kleiner als bei einer relationalen Datenbank. Wenn die Anzahl der Elemente sehr groß ist (z. B. Hunderte Millionen), ist der Speicherverbrauch schrecklich.
2. Bit-basiert auf Bit
Redis kann verwendet werden, um eine Zählung zu implementieren, die stärker komprimiert ist als der festgelegte Speicher. 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:
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 ist viel enger . Darüber hinaus ist der Speicherplatzverbrauch abhängig vom maximalen Offset und hat nichts mit dem Zählwert zu tun. Wenn der maximale Offset groß ist, ist auch der Speicherverbrauch beträchtlich.
3. Es ist schwierig, eine genaue eindeutige Zählung extrem großer Datenmengen auf der Grundlage von HyperLogLog zu erreichen
, aber wenn es nur eine Näherung ist, gibt es unter anderem viele effiziente Algorithmen in der Informatik Einer davon ist HyperLogLog Counting. Ein sehr berühmter Algorithmus, der mit nur etwa 12 KB Speicher Hunderte Millionen eindeutiger Zählungen erreichen kann und dessen Fehler auf etwa ein Prozent begrenzt ist. Die beteiligten Befehle sind wie folgt:
PFADD key element [element ...] # 加入元素 PFCOUNT key [key ...] # 计数
Diese Zählmethode ist wirklich magisch und ich habe sie noch nicht vollständig verstanden. Wenn Sie interessiert sind, können Sie die entsprechenden Artikel ausführlich studieren.
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.
Weitere drei Möglichkeiten zur Implementierung der eindeutigen Zählung in Redis finden Sie auf der chinesischen PHP-Website, um verwandte Artikel zu teilen!