Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

O tamanho do nome afeta o desempenho no Redis?


A chave que você está falando não é tão longa assim.

A chave de exemplo que você fornece é para um conjunto, os métodos de pesquisa de conjunto são O(1). As operações mais complexas em um conjunto (SDIFF, SUNION, SINTER) são O(N). As chances são de que preencher $userId era uma operação mais cara do que usar uma chave mais longa.

O Redis vem com um utilitário de benchmark chamado redis-benchmark , se você modificar o teste "GET" em src/redis-benchmark.c para que a chave seja apenas "foo", você pode executar o teste de chave curta após um 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);

Aqui está a velocidade de teste GET para 3 execuções subsequentes da tecla curta "foo":
59880.24 requests per second
58139.53 requests per second
58479.53 requests per second

Aqui está a velocidade do teste GET depois de modificar a fonte novamente e alterar a chave para "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

Portanto, mesmo teclas muito longas não têm um grande impacto na velocidade do redis. E isso é em GET, uma operação O(1). Operações mais complexas seriam ainda menos sensíveis a isso.

Eu acho que ter chaves que identificam claramente quais valores elas possuem supera em muito qualquer desempenho de velocidade minúsculo que você obteria de chaves abreviadas.

Se você quiser ir mais longe, há também um -r [keyspacelen] parâmetro no utilitário redis-benchmark que permite criar chaves aleatórias (desde que tenham ':rand:' nelas), você pode simplesmente aumentar o tamanho do prefixo no código de teste para o tamanho desejado.