2016-06-02 7 views
1

Есть ли способ добавить список моих проектов в redis Stackexchange.Redis.Extensions. Я знаю, что могу использовать SetAdd, но вставлять элементы по одному. Я хотел вставить в Range. Я также хочу получить предметы по Range. i.e по индексу начала и конца В следующем коде я могу извлечь список через кусок, но он возвращает RedisValue []. Как я могу преобразовать его в мой списокКак я могу добавить Список пользовательских объектов в Redis по диапазону redis Список

Примечание

public static List<T> GetListItemRange<T>(string key, int start, int chunksize) where T : class 
    { 
     List<T> obj = default(List<T>); 
     try 
     { 
      if (Muxer != null && Muxer.IsConnected && Muxer.GetDatabase() != null) 
      { 
       var cacheClient = new StackExchangeRedisCacheClient(Muxer, new NewtonsoftSerializer()); 
       var values = cacheClient.Database.ListRange(key, start, (start + chunksize - 1)); 
       obj = Array.ConvertAll(values, x => JsonConvert.DeserializeObject<T>(x)).ToList(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Logger.Fatal(ex.Message, ex); 
     } 
     return obj; 
    } 

в то время как список прибавление часть на данный момент

public static bool InsertListItemRange<T>(string key, List<T> obj) where T : class 
     { 
      bool result = false; 
      try 
      { 
       if (Muxer != null && Muxer.IsConnected && Muxer.GetDatabase() != null) 
       { 
        var cacheClient = new StackExchangeRedisCacheClient(Muxer, new NewtonsoftSerializer()); 
        foreach (var o in obj) 
        { 
         result = cacheClient.ListAddToLeft(key, o) > 0;  
        }      
       } 
      } 
      catch (Exception ex) 
      { 
       Logger.Fatal(ex.Message, ex); 
      } 
      return result; 
     } 
+0

Был ли у вас этот http://stackoverflow.com/a/22794163/1876572 – Eldho

+0

Он добавляет простую строку, пока я хотел добавить Список элементов моего пользовательского класса. –

+0

Теперь проблема только по одной записи в списке. Может ли какой-то способ вставить мой список с помощью массовой вставки в список Redis –

ответ

0

Мой код для вставки списка в Redis является

public static bool InsertListItemRange<T>(string key, List<T> obj, int chunksize = 25000) where T : class 
     { 
      bool result = false; 
      try 
      { 
       if (Muxer != null && Muxer.IsConnected && Muxer.GetDatabase() != null) 
       { 
        var cacheClient = new StackExchangeRedisCacheClient(Muxer, new NewtonsoftSerializer()); 

        List<RedisValue> lst = new List<RedisValue>(); 

        foreach (var o in obj) 
        { 
         lst.Add(JsonConvert.SerializeObject(o)); 
        } 


        result = cacheClient.Database.ListLeftPush(key, lst.ToArray()) > 0; 


        if (LogRedisRelatedActivities) 
        { 
         Logger.InfoFormat("InsertItem => Key: {0}, Result: {1}", key, result); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Logger.Fatal(ex.Message, ex); 
      } 
      return result; 
     } 

Также для выборки через диапазон Мой код:

public static List<T> GetListItemRange<T>(string key, int start, int chunksize) where T : class 
     { 
      List<T> obj = default(List<T>); 
      try 
      { 
       if (Muxer != null && Muxer.IsConnected && Muxer.GetDatabase() != null) 
       { 
        var cacheClient = new StackExchangeRedisCacheClient(Muxer, new NewtonsoftSerializer()); 
        var redisValues = cacheClient.Database.ListRange(key, start, (start + chunksize - 1)); 
        if (redisValues.Length > 0) 
        { 
         obj = Array.ConvertAll(redisValues, value => JsonConvert.DeserializeObject<T>(value)).ToList(); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Logger.Fatal(ex.Message, ex); 
      } 
      return obj; 
     } 
+0

Это по-прежнему вставляет один за другим, кажется, что нет опции addrange ryt? – Eldho

+0

вставляется за один раз. result = cacheClient.Database.ListLeftPush (ключ, lst.ToArray())> 0; –

+0

или он может быть в одной строке с результатом = cacheClient.Database.ListLeftPush (ключ, obj.Select (JsonConvert.SerializeObject). Выберите (фиктивный финал => (RedisValue)) .ToArray())> 0; –