Interviewer: Wie kann man große Datenmengen in Redis verarbeiten?

Quelle: https://www.toutiao.com/article/6697540366528152077/

Vorwort

Manchmal müssen wir die Verwendung von Online- Redis kennen , insbesondere die Schlüsselwerte einiger Präfixe . Wie können wir das überprüfen? Teilen Sie noch heute ein wenig Wissen mit Ihnen!

Unfall geschah

Weil unser Benutzer- Token-Cache den Schlüssel im Format [user_token:userid] verwendet, um den Wert des Benutzer-Tokens zu speichern. Unser Betrieb und unsere Wartung sollen Entwicklern dabei helfen, zu überprüfen, wie viele angemeldete Benutzer online sind.

Verwenden Sie zum Abfragen direkt die Methode , und der Unfall ist passiert. Infolgedessen ist Redis nicht verfügbar und die Animation wird ausgesetzt .

Analysieren Sie die Gründe

Wir haben Millionen von Online-Anmeldebenutzern und eine große Datenmenge. Der Schlüsselalgorithmus ist ein Durchlaufalgorithmus mit einer Komplexität von O (n), dh je mehr Daten, desto höher die Zeitkomplexität.

Wenn die Datenmenge mehrere Millionen erreicht, friert der Redis-Dienst aufgrund der Befehlstasten ein , da Redis ein Single-Thread-Programm ist, das alle Befehle nacheinander ausführt, und andere Befehle warten müssen, bis der aktuelle Tastenbefehl ausgeführt wird, bevor sie fortfahren können .

Lösung

Wie durchqueren wir also eine große Datenmenge ? Dies wird auch häufig in Vorstellungsgesprächen gefragt. Wir können einen anderen Befehlsscan von Redis verwenden. Werfen wir einen Blick auf die Eigenschaften des Scans

1. Obwohl die Komplexität ebenfalls O(n) ist , wird sie Schritt für Schritt durch den Cursor ausgeführt und blockiert den Thread nicht

2. Der Count-Parameter wird bereitgestellt, nicht die Anzahl der Ergebnisse, sondern die Anzahl der Wörterbuch-Slots, die Redis in einem einzigen Durchgang durchläuft (ungefähr gleich).

3. Wie die Tasten bietet es auch eine Mustervergleichsfunktion.

4. Der Server muss den Status des Cursors nicht speichern. Der einzige Status des Cursors ist die Cursor-Ganzzahl, die vom Scan an den Client zurückgegeben wird .

5. Die zurückgegebenen Ergebnisse können wiederholt werden, was vom Kunden wiederholt werden muss , was sehr wichtig ist;

6. Das Ergebnis einer einzelnen Rückgabe ist leer, was nicht das Ende des Durchlaufs bedeutet, sondern davon abhängt, ob der zurückgegebene Cursorwert Null ist

Empfehlen Sie ein Open-Source- und kostenloses Spring Boot-Praxisprojekt:

https://github.com/javastacks/spring-boot-best-practice

1. Befehlsformat scannen

SCAN cursor [MATCH pattern] [COUNT count]

2. Befehlserklärung: Scan Cursor MATCH <Elemente zurückgeben, die mit dem angegebenen Muster übereinstimmen> zählt die Anzahl der Elemente, die von jeder Iteration zurückgegeben werden

Der SCAN-Befehl ist eine inkrementelle Schleife , die bei jedem Aufruf nur eine kleine Anzahl von Elementen zurückgibt . Es wird also nicht zulassen, dass Redis stirbt

Der SCAN-Befehl gibt einen Cursor zurück, der von 0 aus verläuft und bei 0 endet

3. Beispiele

redis > scan 0 match user_token* count 5 
 1) "6"
 2) 1) "user_token:1000"
 2) "user_token:1001"
 3) "user_token:1010"
 4) "user_token:2300"
 5) "user_token:1389"

Beginnen Sie mit der Durchquerung bei 0, geben Sie den Cursor 6 zurück und geben Sie die Daten zurück. Setzen Sie die Durchquerung des Scans fort und beginnen Sie bei 6

redis > scan 6 match user_token* count 5 
 1) "10"
 2) 1) "user_token:3100"
 2) "user_token:1201"
 3) "user_token:1410"
 4) "user_token:5300"
 5) "user_token:3389"

Zusammenfassen

Dies wird oft in Interviews gefragt , und es wird auch oft von unseren Freunden im Arbeitsprozess verwendet . Im Allgemeinen haben kleine Unternehmen keine Probleme, aber wenn es viele Daten gibt, ist Ihre Arbeitsweise falsch und Ihre Leistung wird betroffen sein. Buckle oh, haha. Danke! ! !

Aktuelle Empfehlung für einen heißen Artikel:

1. Über 1.000 Fragen und Antworten zu Java-Interviews (neueste Version 2022)

2. Genial! Java-Coroutinen kommen. . .

3. Spring Boot 2.x-Tutorial, zu umfassend!

4. Füllen Sie den Bildschirm nicht mit Explosionen und Explosionen, probieren Sie den Dekorationsmodus aus, das ist der elegante Weg! !

5. Laden Sie die neueste Version des „Java Development Manual (Songshan Edition)“ schnell herunter!

Fühlen Sie sich wohl, vergessen Sie nicht zu liken + weiterzuleiten!

Supongo que te gusta

Origin blog.csdn.net/youanyyou/article/details/132535528
Recomendado
Clasificación