StackExchange.Redis - 如何将项目添加到 Redis 集合
StackExchange.Redis - How to add items to a Redis Set
我正在尝试实现以下场景:
- 将 5 个
T
类型的项添加到新的 Redis SET
- 将 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);
我正在尝试实现以下场景:
- 将 5 个
T
类型的项添加到新的 Redis SET - 将 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);