Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Czy długość nazwy wpływa na wydajność w Redis?

Klucz, o którym mówisz, nie jest tak długi.

Przykładowy klucz, który podajesz, dotyczy zestawu, metody wyszukiwania zestawu to O(1). Bardziej złożone operacje na zbiorze (SDIFF, SUNION, SINTER) to O(N). Są szanse, że wypełnianie $userId była bardziej kosztowną operacją niż użycie dłuższego klucza.

Redis jest dostarczany z narzędziem testowym o nazwie redis-benchmark , jeśli zmodyfikujesz test "GET" w src/redis-benchmark.c tak, że klucz to po prostu "foo", możesz uruchomić test skrótu klawiszowego po 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);

Oto prędkość testu GET dla 3 kolejnych uruchomień klawisza skróconego „foo”:

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

Oto prędkość testu GET po ponownej modyfikacji źródła i zmianie klucza na „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

Więc nawet naprawdę długie klawisze nie mają dużego wpływu na szybkość redis. I to jest na GET, operacji O(1). Bardziej złożone operacje byłyby na to jeszcze mniej wrażliwe.

Myślę, że posiadanie kluczy, które jasno określają, jakie wartości mają, znacznie przewyższają jakąkolwiek minimalną wydajność szybkości, którą można uzyskać ze skróconych kluczy.

Jeśli chcesz pójść dalej, istnieje również -r [keyspacelen] parametr w narzędziu redis-benchmark, który pozwala tworzyć losowe klucze (o ile mają w sobie ':rand:'), możesz po prostu zwiększyć rozmiar prefiksu w kodzie testowym do dowolnej długości.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis:Pokaż rozmiar/rozmiar bazy danych dla kluczy

  2. Zapisz sesję użytkownika w Redis z ASP.NET Core na platformie Azure

  3. Po uruchomieniu kwiatka otrzymuję następujące informacje:dbm.error:typ db to dbm.gnu, ale moduł nie jest dostępny

  4. Jak usunąć wszystkie dane w Redis

  5. Nadzorowany przez Django Celery Elastic Beanstalk brak takiego błędu procesu