无法在memcached中存储复杂对象

时间:2011-08-29 09:25:58

标签: c# memcached enyim

我正在使用Enyim。在最后一个版本的ubuntu上使用C#调用memcached客户端服务器http://memcached.org

MemcachedClient mc = new MemcachedClient();
XmlDocument xmlDocument = new XmlDocument();
mc.Store(StoreMode.Set, "foo", xmlDocument);
object myXml= mc.Get("foo");

并且myXml为null,为什么有一种存储我的对象的方法。 目的 : 我正在尝试在我的代码中替换HttpCache用于Memcached但是使用HttpCache我可以将复杂对象添加到缓存中。

这里XmlDocument是一个例子,但是使用简单的类它也不起作用

1 个答案:

答案 0 :(得分:9)

为了使类与Memcached一起使用,它们需要支持二进制序列化,这允许将对象转换为扁平字节数据表示,然后传输到Memcached服务器和从Memcached服务器传输。

在您的示例中,您使用的是XmlDocument,它不是二进制序列化的。您可以通过将其转换为{em> 二进制序列化的string来解决此问题:

    MemcachedClient mc = new MemcachedClient();
    XmlDocument xmlDocument = new XmlDocument();
    mc.Store(StoreMode.Set, "foo", xmlDocument.OuterXml);
    string myXml = mc.Get("foo");
    XmlDocument xmlDocumentOut = new XmlDocument();
    xmlDocumentOut.LoadXml(myXml);

对于您自己的自定义类,您需要添加[Serializable]属性并遵循二进制序列化指南:SerializableAttribute Class