Redis
 sql >> Base de données >  >> NoSQL >> Redis

La longueur du nom a-t-elle un impact sur les performances dans Redis ?

La clé dont vous parlez n'est pas très longue.

L'exemple de clé que vous donnez est pour un ensemble, les méthodes de recherche d'ensemble sont O(1). Les opérations les plus complexes sur un ensemble (SDIFF, SUNION, SINTER) sont O(N). Il y a de fortes chances que le remplissage de $userId était une opération plus coûteuse que d'utiliser une clé plus longue.

Redis est livré avec un utilitaire de référence appelé redis-benchmark , si vous modifiez le test "GET" dans src/redis-benchmark.c afin que la clé soit simplement "foo", vous pouvez exécuter le test de la clé courte après un make install :

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);

Voici la vitesse de test GET pour 3 exécutions consécutives de la touche courte "foo":

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

Voici la vitesse du test GET après avoir modifié à nouveau la source et changé la clé en "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

Ainsi, même les clés vraiment très longues n'ont pas un impact important sur la vitesse de redis. Et c'est sur GET, une opération O(1). Des opérations plus complexes y seraient encore moins sensibles.

Je pense que le fait d'avoir des clés qui identifient clairement les valeurs qu'elles détiennent l'emporte largement sur les performances de vitesse minuscules que vous obtiendriez des clés abrégées.

Si vous voulez aller plus loin, il y a aussi un -r [keyspacelen] paramètre sur l'utilitaire redis-benchmark qui lui permet de créer des clés aléatoires (tant qu'elles contiennent ':rand:'), vous pouvez simplement augmenter la taille du préfixe dans le code de test à la longueur souhaitée.