StackExchange Redis - StringSet 与 SetAdd 和过期

StackExchange Redis - StringSet vs SetAdd and expiries

StackExchange.Redis中,STRING操作允许设置到期时间,例如:

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

为什么SET操作不行?

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

基本上,这是我想要实现的目标:

给定 List<T>,将项目添加到 Redis 集合(创建或添加到现有集合),有效期为 1 小时。

我该怎么做?或者我应该序列化 List<T> 然后使用 StringSet?

我想使用像 SREM 这样的 SET 函数并将单个项目添加到现有的 SET(而不是重写整个 SET),这就是为什么我尽量不使用 STRING

有什么建议吗?

对于第一个问题(为什么字符串操作有可选的过期时间而集合操作没有):这很简单因为这就是 redis 操作公开的内容SET(特别是使用 EXPX 修饰符)和 SETEX 是此处允许设置过期的 string 操作。 set 操作 SADD 没有公开这样的参数。其中一部分可能是为了避免混淆过期将应用于元素,而实际上过期将应用于整个键(即整个 set)。

那么,最好的办法是明确设置到期时间;在 Redis 级别,这是通过 EXPIREEXPIREATPEXPIREPEXPIREAT;或 SE.Redis 中的 IDatabaseKeyExpireKeyExpireAsync。这必须在 set 存在之后完成;如果集合很大并且您要发送多个批次并且想要确保设置超时,即使它在接近尾声时阻塞,您可能希望在第一个批次之后发送过期时间。