2016-10-12 4 views
0

Ich habe eine große redis SET (mehr als 6M Einträge), und ich muss alle Einträge durchlaufen und machen einige andere Redis-Operationen mit jedem (meist Aufruf einer ZCARD in einem redis. Sorted Mit einem Schlüssel basierend auf dem ursprünglichen Eintrag festlegen).SSCAN vs SMEMBERS Ressourcenverbrauch für große Sätze

Welches ist die effizienteste Art, alle Einträge des SET zu durchlaufen? Verwenden von SSCAN oder Ausführen eines SMEMEBERS-Aufrufs

Antwort

1

SMEMBERS muss über den gesamten Satz iterieren und die gesamte Liste der Schlüssel auf einmal erstellen, während SSCAN bei jedem Aufruf einen Bruchteil der Schlüssel zurückgibt. Während beide die gleiche Menge an Arbeit erledigen, erledigt SSCAN die Arbeit in kleineren Blöcken, was bedeutet, dass es für die meisten Anwendungsfälle eine geringere Auswirkung auf die Leistung von allem anderen hat, was der Server tut.

0

SMEMBERS gibt alle Mitglieder in einem SET in einem Vorgang zurück. Die Dauer dieser Operation ist direkt proportional zur Anzahl der Elemente im SET (Zeitkomplexität: O (N)).

Während dieser Operation reagiert Ihre Instanz nicht auf eine andere Anfrage.

Mit SSCAN können Sie alle Elemente in einem SET durchlaufen. Die Zeitkomplexität, falls festgelegt (O (1)), hängt von der Anzahl der Elemente ab, die Sie bei jedem Aufruf erhalten (diese Zahl wird vom COUNT-Parameter definiert). Die Gesamtkosten für SSCAN werden wahrscheinlich in derselben Größenordnung liegen wie für SMEMBERS, oder vielleicht sogar höher, weil Sie mehrere Anrufe tätigen müssen. Es ermöglicht jedoch, dass andere Anforderungen zwischen zwei Aufrufen verarbeitet werden, sodass Ihre Redis-Instanz nicht mehr reagiert.

All dies ist reine Theorie. Um einen endgültigen Ratschlag zu bekommen, sollten Sie testen und messen, es sollte ziemlich einfach sein.

Verwandte Themen