Ответ 1
Ключ, который вы говорите об использовании, на самом деле не так долго.
Примерный ключ, который вы указываете для набора, устанавливает методы поиска 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
Изменение ключа еще раз к "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem: 1234567890" дает следующее:
58479.53 requests per second
58139.53 requests per second
56179.77 requests per second
Таким образом, даже действительно очень длинные клавиши не оказывают большого влияния на скорость redis. И это на GET, операция O (1). Более сложные операции будут еще менее чувствительны к этому.
Я думаю, что наличие ключей, которые четко определяют, какие значения они имеют, значительно перевешивают любую незначительную скорость, которую вы выбрали из сокращенных ключей.
Если вы хотите принять это дополнительно, там также параметр -r [keyspacelen]
в утилите redis-benchmark, позволяющий создавать случайные ключи (если в них есть ": rand:" ), вы можете просто увеличить размер префикса в тестовом коде до любой требуемой длины.