不能在memcached中存储复杂的对象

本文关键字:复杂 对象 存储 memcached 不能 | 更新日期: 2023-09-27 18:07:08

我和Enyim一起工作。为c#缓存memcached客户端服务器是http://memcached.org在ubuntu的最新版本

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

和myXml是空的,为什么有一种方法来存储我的对象。目的:我试图取代HttpCache在我的Memcached代码,但与HttpCache我可以添加复杂的对象到缓存。

在这里XmlDocument是一个例子,但与一个简单的类它不能太工作

不能在memcached中存储复杂的对象

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

在您的示例中,您使用XmlDocument,它不是二进制序列化的。您可以通过将转换为二进制可序列化的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]属性并遵循二进制序列化的指导方针: