Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Beeinflusst die Namenslänge die Leistung in Redis?

Der Schlüssel, von dem Sie sprechen, ist nicht wirklich allzu lang.

Der Beispielschlüssel, den Sie angeben, ist für ein Set, Set-Lookup-Methoden sind O (1). Die komplexeren Operationen auf einer Menge (SDIFF, SUNION, SINTER) sind O(N). Die Chancen stehen gut, dass $userId ausgefüllt wird war teurer als die Verwendung eines längeren Schlüssels.

Redis wird mit einem Benchmark-Dienstprogramm namens redis-benchmark geliefert , wenn Sie den "GET"-Test in src/redis-benchmark.c so ändern, dass der Schlüssel nur "foo" ist, können Sie den kurzen Schlüsseltest nach einem make install 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 Durchläufe der Kurztaste „foo“:

59880.24 requests per second
58139.53 requests per second
58479.53 requests per second

Hier ist die GET-Testgeschwindigkeit nach erneuter Änderung der Quelle und Änderung des Schlüssels in "set-allBooksBelongToUser:1234567890":

60240.96 requests per second
60606.06 requests per second
58479.53 requests per second

Changing the key yet again to "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem:1234567890" gives this:

58479.53 requests per second
58139.53 requests per second
56179.77 requests per second

So haben selbst wirklich sehr lange Schlüssel keinen großen Einfluss auf die Geschwindigkeit von Redis. Und das ist bei GET, einer O(1)-Operation. Komplexere Operationen wären dafür noch weniger empfindlich.

Ich denke, dass Schlüssel, die eindeutig identifizieren, welche Werte sie enthalten, jede winzige Geschwindigkeitsleistung, die Sie mit abgekürzten Schlüsseln erzielen würden, bei weitem aufwiegen.

Wenn Sie dies weiter ausführen möchten, gibt es auch ein -r [keyspacelen] Parameter des Dienstprogramms redis-benchmark, mit dem zufällige Schlüssel erstellt werden können (solange sie ':rand:' enthalten), können Sie einfach die Größe des Präfixes im Testcode auf die gewünschte Länge erhöhen.