Ich verwende zum Beispiel gerne ausführliche Namen in Redis set-allBooksBelongToUser:$userId
.
Ist das in Ordnung oder wirkt sich das auf die Leistung aus?
Der Schlüssel, über den Sie sprechen, ist nicht wirklich so lang.
Der von Ihnen angegebene Beispielschlüssel gilt für eine Menge. Die Suchmethoden für Mengen sind O (1). Die komplexeren Operationen an einem Set (SDIFF, SUNION, SINTER) sind O (N). Es besteht die Möglichkeit, dass das Auffüllen $userId
teurer war als die Verwendung eines längeren Schlüssels.
Redis wird mit einem Benchmark-Dienstprogramm namens geliefert. redis-benchmark
Wenn Sie den "GET" -Test in src / redis-Benchmark.c so ändern, dass der Schlüssel nur "foo" ist, können Sie den Kurzschlüsseltest nach einem der make install
folgenden Schritte ausführen :
diff --git a/src/redis-benchmark.c b/src/redis-benchmark.c
--- a/src/redis-benchmark.c
+++ b/src/redis-benchmark.c
@@ -475,11 +475,11 @@
benchmark("MSET (10 keys)",cmd,len);
free(cmd);
- len = redisFormatCommand(&cmd,"SET foo:rand:000000000000 %s",data);
+ len = redisFormatCommand(&cmd,"SET foo %s",data);
benchmark("SET",cmd,len);
free(cmd);
- len = redisFormatCommand(&cmd,"GET foo:rand:000000000000");
+ len = redisFormatCommand(&cmd,"GET foo");
benchmark("GET",cmd,len);
free(cmd);
Hier ist die GET-Testgeschwindigkeit für 3 aufeinanderfolgende Läufe des Kurzschlüssels "foo":
59880.24 requests per second
58139.53 requests per second
58479.53 requests per second
Hier ist die GET-Testgeschwindigkeit, nachdem Sie die Quelle erneut geändert und den Schlüssel in "set-allBooksBelongToUser: 1234567890" geändert haben:
60240.96 requests per second
60606.06 requests per second
58479.53 requests per second
Ändern Sie den Schlüssel wieder auf „ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem: 1234567890“ gibt dies:
58479.53 requests per second
58139.53 requests per second
56179.77 requests per second
Selbst wirklich sehr lange Tasten haben keinen großen Einfluss auf die Geschwindigkeit von Redis. Und dies ist bei GET eine O (1) -Operation. Komplexere Operationen wären dafür noch weniger empfindlich.
Ich denke, dass Schlüssel, die klar identifizieren, welche Werte sie enthalten, die winzige Geschwindigkeitsleistung, die Sie mit abgekürzten Schlüsseln erzielen würden, bei weitem überwiegen.
Wenn Sie dies weiter -r [keyspacelen]
verfolgen möchten , gibt es im Redis-Benchmark-Dienstprogramm auch einen Parameter, mit dem zufällige Schlüssel erstellt werden können (sofern sie ': rand:' enthalten). Sie können einfach das Präfix in der Datei erhöhen Testen Sie den Code auf die gewünschte Länge.
Redis hält gerne alle Tasten im Speicher. Je länger Ihre durchschnittliche Schlüssellänge ist, desto weniger kann gespeichert werden. Ja, die Schlüssellänge kann die Leistung stark beeinflussen, aber wahrscheinlich nicht wesentlich für Sie. Das heißt, mit einem kleinen Schlüsselbereich (z. B. einem, der leicht in den Speicher passt) funktionieren ein 128-Byte-Schlüssel und ein 16-Byte-Schlüssel nicht dramatisch anders.
quelle
Ich kann diese Frage nicht mit Sicherheit beantworten. Ich kann jedoch einige Fragen dazu stellen und einige Beobachtungen machen.
Ich denke, es ist offensichtlich, dass extrem lange Schlüssel (Namen) und / oder Werte einen Einfluss auf die Gesamtleistung haben würden, wenn sie überhaupt verwendet werden können. Diese Auswirkungen können im Client, über das Netzwerk oder auf dem Server auftreten. Die erste Frage, die Sie herausziehen sollten, wäre also:
Wie lange können die Schlüssel und Werte zwischen Redis und Ihren Kunden liegen?
Durch die Suche nach Redis , Schlüssellänge und -limits erhalte ich einen interessanten Blogeintrag zu Redis vs. memcached, der möglicherweise Ihre Frage beantwortet. Die erste Antwort auf diesen Blogeintrag scheint von Salvatore Sanfilipo, dem Erfinder von Redis (Anfang letzten Herbst: 09/2010), verfasst worden zu sein, was darauf hindeutet, dass eine neuere Version deutlich bessere Ergebnisse zeigen würde. Zwei Kommentare von diesem Link führen uns zu Salvatores Redis / memcached Benchmark, der einige Tage nach seiner Antwort auf den ursprünglichen "Blagger" (der anonym zu sein scheint) veröffentlicht wurde.
Dies beantwortet die Fragen nicht (wie lang können die Schlüssel sein und an welchen Stellen sind erkennbare Auswirkungen auf die Leistung). Es gibt uns jedoch einen Hinweis auf die Herangehensweise an die Frage.
Die Autoren dieser beiden Artikel haben Code geschrieben und getestet ... und die Ergebnisse grafisch dargestellt.
Wir könnten alle möglichen Vermutungen anstellen. Wir könnten uns den Code ansehen und versuchen, ihn herauszufinden.
Der sinnvollste Weg, sich einer Frage dieser Art zu nähern, besteht darin, einen Code zu schreiben, um ein vorgeschlagenes Verwendungsmuster zu messen ... und einen weiteren, um ein anderes zu testen (zum Beispiel einen Bereich von Schlüssellängen zwischen 8 Zeichen und ... wie) lang möchten Sie ... 8 Kilobyte?) ... und das messen Sie es.
quelle
Ich glaube nicht, dass die Länge des Variablennamens die Leistung beeinflusst. Die Variable wird dieselbe Stelle einnehmen wie jede Variable für diesen Datentyp, sofern Sie die maximale Namenslänge nicht überschreiten.
quelle