Влияет ли длина имени на производительность в Redis?
Мне нравится использовать подробные имена в Redis, например set-allBooksBelongToUser:$userId
.
это нормально или это влияет на производительность?
4 ответа:
ключ, о котором вы говорите, на самом деле не так уж и долго.
ключ примера, который вы даете, предназначен для набора, методы поиска набора-O (1). Более сложные операции на множестве (SDIFF, SUNION, SINTER) являются O(N). Скорее всего, что заселение
$userId
была более дорогая операция, чем использование более длинного ключа.Redis поставляется с эталонной утилитой под названием
redis-benchmark
, если вы измените тест " GET " в src/redis-benchmark.c так что они ключ просто "фу", вы можете запустить короткий ключевой тест после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);
вот получить тестовую скорость для 3 последующих запусков короткого ключа "foo":
59880.24 requests per second 58139.53 requests per second 58479.53 requests per second
вот получить тестовую скорость после изменения источника снова и изменения ключа на "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:'), вы можете просто увеличить размер префикса в тестовом коде до любого длина, которую вы хотели.
Redis любит держать все ключи в памяти. Чем больше средняя длина ключа, тем меньше его можно хранить в памяти. Так что да, длина ключа может значительно повлиять на производительность, но, вероятно, не значительно в том, как вы обеспокоены. То есть, с небольшим пространством ключей (например, тот, который легко помещается в памяти), 128-байтовый ключ и 16-байтовый ключ не будут работать резко по-разному.
Я не могу ответить на этот вопрос с уверенностью. Тем не менее, я могу задать несколько вопросов об этом и предложить некоторые замечания.
Я думаю, что очевидно, что очень длинные ключи (имена) и/или значения будут иметь влияние на производительность на общую производительность, если их вообще можно использовать. Эти воздействия могут быть в клиенте, по сети, или на сервере. Поэтому первый вопрос, который нужно вытащить из вашего будет:
как долго могут быть ключи и значения между редисом и вашими клиентами?
Поиск Рэдис,длина ключа и ограничения nets мне интересную запись в блоге на Redis против memcached, который может ответить на ваш вопрос. Первый ответ на эту запись в блоге, по-видимому, был написан Сальваторе Санфилипо, создателем Redis (в начале прошлой осени: 09/2010), предполагая, что более поздняя версия покажет значительно лучшие результаты. Два комментарии вниз от этого связывают нас с Сальваторе Redis / memcached Benchmark который был опубликован через несколько дней после того, как он ответил на оригинальный "blagger" (который, кажется, анонимен).
Это не отвечает на вопросы (как долго могут быть ключи и в каких точках есть обнаруживаемые воздействия на производительность). Тем не менее, это дает нам ключ к решению вопроса.
авторы обеих этих статей написали код и протестировали его ... и нарисовал график результаты.
мы могли бы сделать всевозможные догадки. Мы могли бы посмотреть на код и попытаться понять его.
однако наиболее значимым способом подхода к вопросу такого рода является написание некоторого кода для измерения одного предлагаемого шаблона использования ... и еще немного, чтобы проверить другой (например, диапазон длин клавиш от 8 символов до ... как долго вы хотели бы ... 8 килобайт?) ... и измерьте его.