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.