Calcularea numărului de utilizatori unici zilnici (DAU – Daily Active Users), adrese IP distincte sau termeni de căutare unici folosind structuri clasice de tip Set devine extrem de costisitoare: un set cu 100 de milioane de șiruri de 32 de octeți necesită peste 4-6 GB de memorie RAM.
Pentru a rezolva această problemă la scară uriașă, Redis implementează algoritmul probabilistic HyperLogLog (HLL). O structură HyperLogLog consumă un maxim garantat de 12 KB de memorie RAM indiferent dacă numărați 10 elemente sau 1 miliard de elemente, oferind o eroare standard de aproximare de doar 0.81%.
# 1. Înregistrăm vizitele utilizatorilor pe parcursul zilei de luni:
PFADD vizite:2026-10-20 "ip:86.124.10.1" "ip:194.102.5.8" "user:9912"
# Răspuns: (integer) 1 (dacă cel puțin un registru intern a fost modificat)
# 2. Adăugăm intrări noi (duplicatele sunt ignorate probabilistic):
PFADD vizite:2026-10-20 "ip:86.124.10.1" "ip:79.112.44.20"
# 3. Aflăm cardinalitatea unică estimată pentru ziua de luni:
PFCOUNT vizite:2026-10-20
# Răspuns: (integer) 4
# 4. Înregistrăm vizitele din ziua de marți:
PFADD vizite:2026-10-21 "ip:86.124.10.1" "ip:109.166.8.9" "user:400"
# 5. Fuzionăm registrele zilnice într-o structură consolidată pentru întreaga săptămână:
# Operația PFMERGE realizează reuniunea matematică a registrelor în timp O(N) infim:
PFMERGE vizite:saptamana_42 vizite:2026-10-20 vizite:2026-10-21
PFCOUNT vizite:saptamana_42
# Răspuns: (integer) 6 (vizitatorul duplicat comun 'ip:86.124.10.1' este numărat o singură dată!)
Cum Funcționează Matematic HyperLogLog?
HyperLogLog calculează un hash pe 64 de biți pentru fiecare element introdus. Observă numărul de zerouri consecutive de la începutul șirului binar rezultat: dacă un hash are k zerouri la început, probabilitatea matematică este ca setul să conțină aproximativ $2^k$ elemente unice. Pentru a elimina anomaliile statistice, Redis folosește 16.384 de registre interne independente (de 6 biți fiecare: $16384 \times 6 = 98.304 \text{ biți} \approx 12 \text{ KB}$) și calculează media armonică a estimărilor.