2011-08-29 6 views
5

Enyim.Caching memcached 클라이언트에 대한 서버 # http://memcached.orghttp://memcached.org 우분투의 마지막 버전에서memcached에 복잡한 객체를 저장할 수 없습니다.

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는 예제이지만 간단한 클래스로도 작동하지 않습니다.

+0

사용중인 memcache 빌드는 무엇입니까? Windows에서 [this] (http://www.couchbase.com/products-and-services/memcached)를 사용하는 것이 좋습니다. – Dasun

+0

우분투에서 http://memcached.org와 협력하고 있으며 모든 서버를 변경하기 전에 솔루션으로 complexe 객체를 저장할 수 있는지 확인할 수 있습니까? –

+0

'XmlDocument'는 바이너리'[Serializable]'로 보이지 않습니다. 대신 XML의 문자열 표현, 즉'xmlDocument.OuterXml'을 사용하십시오. –

답변

9

작동하지 않습니다,이 객체가 평면으로 변환 할 수 있습니다 바이트 데이터 표현으로 변환 된 다음 Memcached 서버로 전송되고 Memcached 서버로 전송됩니다.

예에서 XmlDocument을 사용합니다. 이진진은 이진 형식이 아닙니다. 당신과 string에서 변환하여이 문제를 해결할 수있는 것은 직렬화 바이너리입니다 : SerializableAttribute Class를 : 사용자 정의 클래스

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] 속성을 추가 및 바이너리 직렬화에 대한 지침을 따라야합니다.

+0

XmlDocument의 메모리 인쇄를 추가 할 수 없습니까? 왜냐하면, 아이디어는 직렬화/비 직렬화를 피하는 것입니다. –

+2

@Christophe "객체"가 Memcached 서버로 전송 될 수 있도록 직렬화를 피할 수는 없습니다. 객체 그래프는 플랫 바이트 지향 데이터 스트림으로 변환해야합니다. 이 프로세스를 좀 더 효율적으로 만들어야한다면, 닷넷의 바이너리 직렬화보다 훨씬 빠르고 효율적인 대역폭 인 protobuf.net을 사용할 것입니다.여전히 XmlDocument가 바이너리 직렬화 가능하지 않기 때문에 문제가 발생할 것이다. 나만의 수업을 만들고 protobuf.net의 지침을 따르십시오. –

+0

@Christophe Protobuf.net : http://code.google.com/p/protobuf-net/. –

관련 문제