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