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.