5

私はEnyimを使用しています。C#用のmemcachedクライアントをキャッシュすると、サーバーはubuntuの最後のバージョンではhttp://memcached.orgになります。

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

myXmlがnullですが、オブジェクトを保存する方法があるのはなぜですか。目的:MemcachedのコードでHttpCacheを置き換えようとしていますが、HttpCacheを使用すると、複雑なオブジェクトをキャッシュに追加できます。

ここでXmlDocumentは例ですが、単純なクラスでは機能しません

4

1 に答える 1

9

クラスを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]属性を追加し、バイナリシリアル化のガイドライン(SerializableAttribute Class )に従う必要があります。

于 2011-08-29T13:00:22.413 に答える