2015-03-17 2 views
3

Мне нужно получить около 10k хэшей с сервера redis. Поскольку нет команды для получения нескольких хэшей в redis, я повторял все ключи, используя вызов db.HashGetAllAsync(), а затем ожидал завершения всех задач. Несмотря на то, что это сработало, во время этих вызовов я увидел резкий всплеск задержки на панели инструментов RedisLabs.Получение нескольких хэшей из redis с использованием StackExchange.Redis

Есть ли способ получить много хэшей одновременно? Возможно, есть какие-либо настройки ConnectionMultiplexer, которые могут помочь в этой ситуации?

+0

Вы используете несколько вызовов этого вызова, а затем ожидаете возвращения всех результатов? Если да, то сколько одновременных соединений вы используете? –

ответ

2

Существует не varadic hgetall, поэтому да: самым простым подходом было бы конвейер огромное количество отдельных hgetall. Единственное, что вы могли бы сделать , возможно, даже - использовать сценарий Lua (eval/evalsha) для создания нескольких элементов в каждом элементе, но я не вижу, как это уменьшит нагрузку на сервер или пропускную способность, поэтому Кажется, стоит попробовать!

В любом случае, да: это создаст некоторую работу на сервере.

+0

Я предполагаю, что использование сценария Lua в ситуации, когда я пытаюсь получить хэши 10k, поставит другие вызовы redis в очередь и еще больше увеличит задержку. – pauliusnrk

+2

@pauliusnrk yep, я тоже так думаю; ваша * лучшая ставка * здесь, ИМО, будет делать основной хеш, прочитанный от подчиненного –