StackExchange.Redis - 如何将项目添加到 Redis 集合

StackExchange.Redis - How to add items to a Redis Set

我正在尝试实现以下场景:

  1. 将 5 个 T 类型的项添加到新的 Redis SET
  2. 将 1 个 T 类型的项目添加到 现有 Redis SET

(我知道 SETADD 不关心集合是否存在,只是列出我的场景以供参考)

我可以看到有 SetAddAsync(RedisKey, RedisValue value)SetAddAsync(RedisKey, RedisValue[] values),但我不确定如何使用它(以及使用哪个重载?)

当我使用 StringSet 时,我只是将 T 序列化为 byte[],然后将其用作 RedisValue 参数。

但不确定如何为集合做。

这是我的:

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

其中 serializer 是一个 class,它将 T 转换为 byte[]

它与您使用 StringSet 的方式基本相同。唯一的区别是当设置一个 string 时,只设置一个值是有意义的——但是当添加到 set 时,你可能想要一次添加 1 或更多 个元素。

如果您要添加一个元素,只需使用:

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

如果你想一次性添加更多的物品到集合中,那么首先获取序列化的物品,例如:

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

或调整现有代码:

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

这里的重要区别是我希望您的原始代码以 byte[][] 结尾,因为您需要 RedisValue[]。上面的 (RedisValue) 演员应该为你解决这个问题。

然后调用:

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

这对应于variadic form of SADD.