2015-02-17 3 views
0

Так что мне нужно получить доступ к большому количеству разных хэшей (в StackExchange.Redis, у меня разные RedisKey).StackExchange.Redis: пакетный доступ для нескольких хэшей

Каков наилучший (самый быстрый) способ сделать это? Например, для этих двух возможных реализаций является либо правильным? Какой из них лучше работает?

  1.  List<Task<HashEntry[]>> list = new List<Task<HashEntry[]>>(); 
         List<RedisKey> keys; //Previously initialized list of keys 
         foreach (var key in keys) 
         { 
          var task = db.HashGetAllAsync(key); 
          list.Add(task); 
         } 
         await Task.WhenAll(list); 
    

2.

  List<Task<HashEntry[]>> list = new List<Task<HashEntry[]>>(); 
      List<RedisKey> keys; //Previously initialized list of keys 
      IBatch batch = db.CreateBatch(); 
      foreach (var key in keys) 
      { 
       var task = batch.HashGetAllAsync(key); 
       list.Add(task); 
      } 
      batch.Execute(); 

ответ

2

На производительность: вы приуроченная их?

Кроме этого: оба работают и имеют разные компромиссы; последний является синхронным, например, - бит выгоды от избежания все накладных расходов и осложнений TPL. Вы также можете рассмотреть третий вариант - сценарий Lua, который принимает и массивы ключей в качестве ввода, и вызывает для каждого из них HGETALL.

+0

Здравствуйте. Я попробовал три из них ... странно (для меня) победитель (а иногда и большой запас) был «конвейерным» (многократно называя HashGetAllAsync и ожидая). Я говорю странно, потому что, читая в Интернете, Lua, казалось, было превосходным решением. Может быть, я использую плохой скрипт? Я использую аналогичный скрипт для опубликованного здесь [link] (http://stdout.tradier.com/development/2014/07/10/using-lua-to-implement-multi-get-on-redis-hash .html). –

 Смежные вопросы

  • Нет связанных вопросов^_^