StackExchange.Redis能否用于存储POCO对象?

17

我正在使用两个著名的C#驱动程序ServiceStackStackExchange来评估Redis。不幸的是,我不能使用ServiceStack,因为它不是免费的。现在我正在尝试使用StackExchange。

有人知道我是否可以使用StackExchange.Redis持久化POCO吗?

1个回答

20
StackExchange.Redis可以存储二进制安全的Redis Strings。这意味着,您可以使用所选的序列化技术轻松地序列化POCO并将其放入其中。
以下示例使用.NET的BinaryFormatter。请注意,您必须使用SerializableAttribute装饰您的类才能使其工作。
示例设置操作:
PocoType somePoco = new PocoType { Id = 1, Name = "YouNameIt" };
string key = "myObject1";
byte[] bytes;

using (var stream = new MemoryStream())
{
    new BinaryFormatter().Serialize(stream, somePoco);
    bytes = stream.ToArray();
}

db.StringSet(key, bytes);

获取操作示例:

string key = "myObject1";
PocoType somePoco = null;
byte[] bytes = (byte[])db.StringGet(key);

if (bytes != null)
{
    using (var stream = new MemoryStream(bytes))
    {
        somePoco = (PocoType) new BinaryFormatter().Deserialize(stream);
    }
}

这是一个很好的例子,但请千万不要使用BknaryFormatter。永远不要。/cc @Duke - Marc Gravell
5
@Frank BF在版本控制和重构方面很糟糕,且只适用于特定平台。我强烈建议使用设计为容错的多平台工作的东西;如xml、json,或者对于二进制数据:protobuf等。 - Marc Gravell
1
@MarcGravell,Newtonsoft.Json是BinaryFormatter的一个好替代品吗? - Burak Karakuş
5
@Burak 这是一个好的、成熟的序列化程序,这是毫无疑问的。它取决于你的目标。如果你想要尽量减少带宽和服务器端的影响(包括CPU和内存),可以使用像protobuf-net或bond这样的工具。如果这不是很重要:json也可以 - 它的优点是人类可读性好,但代价是文件大小较大。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接