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

RPM*_*984 8 c# redis stackexchange.redis

我正在尝试实现以下方案:

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

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

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

当我使用时StringSet,我只是序列化为Ta byte[],然后使用它作为RedisValue参数.

但不知道怎么做套装.

这就是我所拥有的:

var items = values.Select(serializer.Serialize).ToArray();
await cache.SetAddAsync(key, items);
Run Code Online (Sandbox Code Playgroud)

哪个serializer是转换T为a 的类byte[]

Mar*_*ell 11

它与您的使用方式基本相同StringSet.唯一的区别是,在设置字符串时,只设置一个值是有意义的 - 但是当添加到集合时,您可能希望一次添加一个或多个元素.

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

db.SetAdd[Async](key, serializedValue);
Run Code Online (Sandbox Code Playgroud)

如果您想一次性添加更多项目,那么首先获取序列化项目,例如:

var items = Array.ConvertAll(values, value => (RedisValue)serializer.Serialize(value));
Run Code Online (Sandbox Code Playgroud)

或者调整现有代码:

var items = values.Select(value => (RedisValue)serializer.Serialize(value)).ToArray();
Run Code Online (Sandbox Code Playgroud)

这里的重要区别在于,我希望您的原始代码最终会带有a byte[][],where-如您所需RedisValue[].(RedisValue)上面的演员应该为你解决.

然后打电话:

db.SetAdd[Async](key, serializedValues);
Run Code Online (Sandbox Code Playgroud)

这对应于SADD可变形式.