Ключът, за който говорите да използвате, всъщност не е толкова дълъг.
Примерният ключ, който давате, е за набор, методите за търсене на набор са O(1). По-сложните операции върху набор (SDIFF, SUNION, SINTER) са O(N). Вероятно е това да попълни $userId
беше по-скъпа операция от използването на по-дълъг ключ.
Redis идва с помощна програма за сравнителен анализ, наречена redis-benchmark
, ако промените теста "GET" в src/redis-benchmark.c, така че ключът им да е просто "foo", можете да стартирате теста с кратки ключове след 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);
Ето тестовата скорост на GET за 3 следващи пуска на краткия клавиш „foo“:
59880.24 requests per second
58139.53 requests per second
58479.53 requests per second
Ето тестовата скорост на GET, след като промените отново източника и промените ключа на "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
Така че дори наистина дългите клавиши нямат голямо влияние върху скоростта на redis. И това е на GET, операция O(1). По-сложните операции биха били още по-малко чувствителни към това.
Мисля, че наличието на клавиши, които ясно идентифицират какви стойности притежават, значително надвишава всяка малка скорост, която бихте получили от съкратените клавиши.
Ако искате да продължите с това, има и -r [keyspacelen]
параметър на помощната програма redis-benchmark, която й позволява да създава произволни ключове (стига да имат ':rand:' в тях), можете просто да увеличите размера на префикса в кода за тестване до желаната дължина.