sql >> Database >  >> NoSQL >> Redis

Heeft de lengte van de naam invloed op de prestaties in Redis?

De sleutel waar je het over hebt is niet zo lang.

De voorbeeldsleutel die u geeft is voor een set, set-opzoekmethoden zijn O(1). De meer complexe bewerkingen op een set (SDIFF, SUNION, SINTER) zijn O(N). De kans is groot dat het invullen van $userId was een duurdere operatie dan het gebruik van een langere sleutel.

Redis wordt geleverd met een benchmarkhulpprogramma genaamd redis-benchmark , als u de "GET"-test in src/redis-benchmark.c wijzigt zodat de sleutel gewoon "foo" is, kunt u de sneltoetstest uitvoeren na een 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);

Hier is de GET-testsnelheid voor 3 opeenvolgende runs van de sneltoets "foo":

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

Hier is de GET-testsnelheid nadat de bron opnieuw is gewijzigd en de sleutel is gewijzigd 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

Dus zelfs heel erg lange toetsen hebben geen grote invloed op de snelheid van redis. En dit is op GET, een O(1)-bewerking. Complexere operaties zouden hier nog minder gevoelig voor zijn.

Ik denk dat het hebben van sleutels die duidelijk aangeven welke waarden ze bevatten, veel groter is dan de minuscule snelheidsprestaties die je zou krijgen met verkorte sleutels.

Als je verder wilt gaan, is er ook een -r [keyspacelen] parameter in het redis-benchmark-hulpprogramma waarmee het willekeurige sleutels kan maken (zolang ze ':rand:' in zich hebben), kun je gewoon de grootte van het voorvoegsel in de testcode vergroten tot elke gewenste lengte.



  1. Tel matrixelementen die overeenkomen met de voorwaarde

  2. Publiceer abonneren met nodejs en redis(node_redis)

  3. Op zoek naar een oplossing tussen het instellen van veel timers of het gebruik van een geplande taakwachtrij

  4. AngularJs en MongoDB/Mongoose gebruiken