2015-04-09 13 views
6

W StackExchange.Redis, operacje STRING pozwolić na wygaśnięcie być ustawiony, np:Stack Exchange Network Redis - StringSet vs SetAdd i expiries

Task<bool> StringSetAsync(
RedisKey key, 
RedisValue value, 
TimeSpan? expiry = null, 
When when = When.Always, 
CommandFlags flags = CommandFlags.None); 

Dlaczego jest to, że operacja SET nie?

Task<long> SetAddAsync(
RedisKey key, 
RedisValue[] values, 
CommandFlags flags = CommandFlags.None); 

Zasadniczo, oto co chcę osiągnąć:

Biorąc pod uwagę List<T>, dodać elementy do Redis Set (albo utworzyć lub dodać do istniejących) z upływem 1 godziny.

Jak to zrobić? A może powinienem serializować List<T>, a następnie użyć StringSet?

Chcę użyć funkcji SET, takich jak SREM i dodać pojedyncze elementy do istniejącego SET (zamiast przepisywania całego SET), dlatego próbuję nie używać STRING.

Każda rada?

+1

@marcgravell jesteś tam? :) – RPM1984

+2

tak, jestem tutaj; p –

Odpowiedz

7

Na pierwsze pytanie (dlaczego operacje strun mają opcjonalne kończeniu gdy zbiór operacji nie): to jest po prostu ponieważ to, co operacje Redis wystawiać: SET (w szczególności z EX i PX modyfikatory) i SETEX to operacje string, które umożliwiają ustawienie wygasania. Zestaw nie ujawnia takiego parametru. Jedną z nich jest prawdopodobnie uniknięcie nieporozumień, że wygaśnięcie dotyczyłoby elementu, gdy w rzeczywistości wygaśnięcie dotyczyłoby całego klucza (tj. Całego zestawu ,).

Najlepiej jest zatem jawnie ustalić termin wygaśnięcia; na poziomie redizji, jest to za pośrednictwem EXPIRE, EXPIREAT,lub; lub IDatabase w SE.Redis: KeyExpire lub KeyExpireAsync. To musi być wykonane po zestaw zestaw; jeśli zbiór jest duży i wysyłasz wiele partii i chcesz ustawić limit czasu, nawet jeśli dławi się przy końcu, możesz wysłać wiadomość o wygaśnięciu po pierwszej partii.

+0

Doskonała odpowiedź. Dzięki! :) – RPM1984