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

La lunghezza del nome influisce sulle prestazioni in Redis?

La chiave di cui stai parlando non è molto lunga.

La chiave di esempio fornita è per un set, i metodi di ricerca del set sono O(1). Le operazioni più complesse su un set (SDIFF, SUNION, SINTER) sono O(N). È probabile che popolando $userId era un'operazione più costosa rispetto all'utilizzo di una chiave più lunga.

Redis viene fornito con un'utilità di benchmark chiamata redis-benchmark , se modifichi il test "GET" in src/redis-benchmark.c in modo che la loro chiave sia solo "foo", puoi eseguire il test della chiave breve dopo 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);

Ecco la velocità di prova GET per 3 esecuzioni successive del tasto di scelta rapida "foo":

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

Ecco la velocità del test GET dopo aver modificato di nuovo la sorgente e cambiato la chiave 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

Quindi anche i tasti davvero molto lunghi non hanno un grande impatto sulla velocità di redis. E questo è su GET, un'operazione O(1). Operazioni più complesse sarebbero ancora meno sensibili a questo.

Penso che avere chiavi che identificano chiaramente quali valori contengono superi di gran lunga qualsiasi minuscola prestazione di velocità che otterresti da chiavi abbreviate.

Se vuoi andare oltre, c'è anche un -r [keyspacelen] parametro sull'utilità redis-benchmark che gli consente di creare chiavi casuali (purché contengano ':rand:'), puoi semplicemente aumentare la dimensione del prefisso nel codice di test alla lunghezza desiderata.