sql >> Base de Datos >  >> NoSQL >> Redis

¿La longitud del nombre afecta el rendimiento en Redis?

La clave que estás hablando de usar no es realmente tan larga.

La clave de ejemplo que proporciona es para un conjunto, los métodos de búsqueda establecidos son O (1). Las operaciones más complejas sobre un conjunto (SDIFF, SUNION, SINTER) son O(N). Lo más probable es que llene $userId fue una operación más costosa que usar una llave más larga.

Redis viene con una utilidad de referencia llamada redis-benchmark , si modifica la prueba "GET" en src/redis-benchmark.c para que la clave sea simplemente "foo", puede ejecutar la prueba de clave corta después de 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);

Aquí está la velocidad de la prueba GET para 3 ejecuciones posteriores de la tecla corta "foo":

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

Aquí está la velocidad de la prueba GET después de modificar la fuente nuevamente y cambiar la clave a "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

Entonces, incluso las claves realmente largas no tienen un gran impacto en la velocidad de redis. Y esto está en GET, una operación O(1). Las operaciones más complejas serían aún menos sensibles a esto.

Creo que tener claves que identifiquen claramente qué valores contienen supera con creces cualquier rendimiento de velocidad minúsculo que obtendrías de las claves abreviadas.

Si desea llevar esto más lejos, también hay un -r [keyspacelen] parámetro en la utilidad redis-benchmark que le permite crear claves aleatorias (siempre que tengan ':rand:' en ellas), puede simplemente aumentar el tamaño del prefijo en el código de prueba a la longitud que desee.