2015-04-09 14 views
6

Trong StackExchange.Redis, các STRING hoạt động cho phép hết hạn được thiết lập, ví dụ:StackExchange Redis - StringSet vs SetAdd và đã hết giá

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

Tại sao nó rằng hoạt động SET không?

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

Về cơ bản, đây là những gì tôi muốn đạt được:

Cho một List<T>, thêm các mục vào một Redis Set (hoặc tạo ra, hoặc thêm vào hiện có) với hết 1 giờ.

Tôi làm như thế nào? Hoặc tôi có nên serialize các List<T> sau đó sử dụng StringSet?

Tôi muốn sử dụng chức năng SET như SREM và thêm các mục đơn vào SET hiện có (thay vì viết lại toàn bộ SET), đó là lý do tại sao tôi đang cố gắng không sử dụng STRING.

Bạn có lời khuyên nào không?

+1

@marcgravell là bạn ra khỏi đó? :) – RPM1984

+2

vâng, tôi ở đây; p –

Trả lời

7

Đối với câu hỏi thứ nhất (tại sao hoạt động chuỗi có hết hạn không bắt buộc khi hoạt động thiết lập không): mà chỉ đơn giản là bởi vì đó là những gì các hoạt động redis lộ: SET (đặc biệt với EXPX bổ) và SETEX là các hoạt động chuỗi tại đây cho phép đặt thời hạn. đặt hoạt độngSADD không hiển thị thông số như vậy. Một phần của điều này có lẽ là để tránh nhầm lẫn rằng thời gian hết hạn sẽ áp dụng cho phần tử, khi thực tế hết hạn sẽ áp dụng cho toàn bộ khóa (tức là toàn bộ đặt).

Đặt cược tốt nhất của bạn, sau đó, là đặt hết hạn một cách rõ ràng; ở cấp độ redis, đây là thông qua EXPIRE, EXPIREAT, PEXPIRE hoặc PEXPIREAT; hoặc trên IDatabase trong SE.Redis: KeyExpire hoặc KeyExpireAsync. Điều này phải được thực hiện sau số đặt tồn tại; nếu tập hợp lớn và bạn đang gửi nhiều đợt và muốn đảm bảo thời gian chờ được đặt ngay cả khi nó bị tắt gần cuối, bạn có thể muốn gửi hết hạn sau đợt đầu tiên.

+0

Câu trả lời hoàn hảo. Cảm ơn! :) – RPM1984

Các vấn đề liên quan