sql >> Database teknologi >  >> NoSQL >> Redis

Påvirker navnelængde ydeevnen i Redis?

Nøglen du taler om at bruge er egentlig ikke så lang.

Eksemplet på nøglen du giver er for et sæt, sæt opslagsmetoder er O(1). De mere komplekse operationer på et sæt (SDIFF, SUNION, SINTER) er O(N). Sandsynligvis udfylder $userId var en dyrere operation end at bruge en længere nøgle.

Redis kommer med et benchmark-værktøj kaldet redis-benchmark , hvis du ændrer "GET"-testen i src/redis-benchmark.c, så nøglen kun er "foo", kan du køre den korte nøgletest efter en 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);

Her er GET-testhastigheden for 3 efterfølgende kørsler af den korte tast "foo":

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

Her er GET-testhastigheden efter at have ændret kilden igen og ændret nøglen til "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

Så selv virkelig lange taster har ikke den store indflydelse på hastigheden af ​​redis. Og dette er på GET, en O(1) operation. Mere komplekse operationer ville være endnu mindre følsomme over for dette.

Jeg tror, ​​at det at have taster, der klart identificerer, hvilke værdier de har, i høj grad opvejer enhver minimal hastighedsydelse, du ville få ud af forkortede taster.

Hvis du ville tage dette videre, er der også en -r [keyspacelen] parameter på redis-benchmark-værktøjet, der lader det oprette tilfældige nøgler (så længe de har ':rand:' i dem), kan du bare øge størrelsen af ​​præfikset i testkoden til den længde, du ønsker.



  1. Sådan formateres data i Model, før du gemmer i Mongoose (ExpressJS)

  2. Mongoose-forespørgsel, hvor værdien ikke er null

  3. Hvordan får man alle nøgler, der matcher et bestemt mønster, fra en hash i redis?

  4. Lagring af kataloghierarki i et nøgleværdidatalager