2016-04-28 6 views
0

Ich habe eine Redis-Datenbank mit ein paar Millionen Schlüsseln. Manchmal muss ich Schlüssel nach dem Muster abfragen, z. 2016-04-28:* für die ich verwende. Erster Aufruf sollteredis scan gibt leere Ergebnisse zurück, aber nicht Null Cursor

scan 0 match 2016-04-28:* 

es dann einen Schlüsselbund und die nächsten Cursor oder 0 zurück, wenn die Suche abgeschlossen ist.

Wenn jedoch eine Abfrage ausgeführt wird und keine übereinstimmenden Schlüssel vorhanden sind, gibt immernoch einen Cursor ungleich Null zurück, aber eine leere Schlüsselgruppe. Dies passiert bei jeder nachfolgenden Abfrage, so dass die Suche nicht wirklich lange zu enden scheint.

Redis docs sagen, dass

SCAN Familie Funktionen garantieren nicht, dass die Anzahl der Elemente pro Anruf ist in einem bestimmten Bereich zurückgegeben. Die Befehle dürfen auch null Elemente zurückgeben, und der Client sollte die Iteration nicht als abgeschlossen betrachten, solange der zurückgegebene Cursor nicht Null ist.

So kann ich nicht einfach aufhören, wenn ich leere Reihe von Schlüsseln bekomme.

Gibt es eine Möglichkeit, die Dinge zu beschleunigen?

Antwort

7

Sie müssen immer den Scan durchführen (d. H. Cursor == 0), um sicherzustellen, dass keine Übereinstimmung vorhanden ist. Sie können jedoch die COUNT option verwenden, um die Anzahl der Iterationen zu reduzieren. Der Standardwert von 10 ist schnell Wenn dies ein übliches Szenario mit Ihrem Spielmuster ist, beginnen Sie es mit jeder leeren Antwort zu erhöhen (z. B. Doppel oder Zweierpotenzen, aber legen Sie eine Höchstgrenze fest), damit Redis "härter suchen" Schlüssel. Auf diese Weise sparen Sie auf Netzwerk-Rundreisen, so dass es "Dinge beschleunigen" sollte.

Verwandte Themen