2015-04-13 29 views
6

próbuję osiągnąć następujące scenariusze:StackExchange.Redis - Jak dodać elementy do Redis Zestaw

  1. dodać 5 elementów typu T do nowego Redis SET
  2. Dodać 1 pozycję typu T do istniejących Redis sET

(wiem SETADD nie obchodzi czy zestaw jest istniejąca, ale po prostu wymieniając moje scenariusze odniesienia)

widzę jest SetAddAsync(RedisKey, RedisValue value) i SetAddAsync(RedisKey, RedisValue[] values), ale nie jestem pewien, w jaki sposób pracować z nim (i które przeciążać użyciu?)

Kiedy Użyłem StringSet, ja po prostu serializacji T do byte[], a następnie użyj tego jako parametru RedisValue.

Ale nie wiem, jak to zrobić w zestawach.

To jest to, co mam:

var items = values.Select(serializer.Serialize).ToArray(); 
await cache.SetAddAsync(key, items); 

gdzie serializer to klasa, która przekształca T do byte[]

Odpowiedz

8

to jest w zasadzie identyczna jak byłoby użyć StringSet. Jedyna różnica polega na tym, że ustawienie ciągu ma sens tylko w przypadku ustawienia jednej wartości - ale przy dodawaniu do zestawu możesz dodać 1 lub więcej elementów naraz.

Jeśli dodajesz jeden element, wystarczy użyć:

db.SetAdd[Async](key, serializedValue); 

Jeśli chcesz dodać większą liczbę elementów do zestawu za jednym razem, to najpierw uzyskać odcinkach elementy, na przykład:

var items = Array.ConvertAll(values, value => (RedisValue)serializer.Serialize(value)); 

lub dostosować istniejący kod:

var items = values.Select(value => (RedisValue)serializer.Serialize(value)).ToArray(); 

ważną różnicą jest to, że spodziewam yo oryginalny kod kończy się na byte[][], gdzie - tak jak potrzebujesz RedisValue[]. Nadpisany powyżej kod powinien naprawić to za Ciebie.

Następnie zadzwonić:

db.SetAdd[Async](key, serializedValues); 

Odpowiada to variadic form of SADD.

+0

ahh, wszystko, czego mi brakowało, było obsadą. (facepalm). dzięki! – RPM1984