2013-04-09 2 views
0

나는 잠시 인터넷 검색을하고 아무 것도 발견하지 못했다.PHP memcache 내부 객체

DOM 또는 PDO와 같은 내부 개체를 처리 할 때 memcache를 사용하여 캐시 할 수 있습니까?

필자는 스크립트가 끝날 때 연결이 닫혀 있기 때문에 PDO가 적합하지 않을 수 있음을 이해합니다. 영구 연결로 변경 될 수 있으므로 캐싱이 더 실현 가능합니까 ???

DOM 개체의 메모리 내 표현을 캐시 할 수 있는지 여부에 대한 문서가 부족합니다. XML 구성 파일은 매우 장황 할 수 있으며 요청 당 이러한 요청을로드하여 DOM을 구성하면 서버 리소스에 상당한 영향을 미칩니다.

누구나 캐싱 경험이 있습니까? 특히 DOM 개체입니까? DOM의 PHP 구현을 다시 파싱 만하면된다. DOM을 초기화하는 것은 각 요청에 반드시 필요한 것은 아닌가?

답변

0

PDO 인스턴스를 캐시 할 수 있습니다. PDO 클래스를 확장하고 __wakeup__sleep 마법 메서드를 구현해야합니다.

__sleep() 방법은 serialize() 전에 호출되고 __wakeupunserialize() 동안 (이 때 설명서에 precised 아니에요).

Memcache로 병합 해제 후 연결을 다시 설정하려면 __wakeup 메서드를 사용합니다.

PDO 인스턴스를 캐싱하는 데 많은 관심이 있다고 생각하지 않습니다.

대부분의 핵심 개체는 캐시 할 수 없습니다. 이것은 제대로 직렬화되지 않았기 때문입니다. Serializable 인터페이스를 구현하는 클래스의 인스턴스 만 가능합니다.

클래스에 공개 속성 만있는 경우 작동하는 경우가 있습니다.

+0

DB 연결과 같은 것을 캐싱하는 것에 대한 걱정 (이것은 제 3 자와 연결되는 것입니다)은 "연결이 존재합니까?"와 같은 것을 파악하는 논리가 (의 이 경우) PDO 클래스. 이것은 unserialise() 함수가 이러한 엣지 케이스를 처리하는지 아닌지를 물어 보았다. 그렇지 않으면, 당신은 불쾌한 놀라움에 빠지게됩니다. 개인적으로, 나는 오히려하지 않을 것입니다. 캐쉬를 시도한 주된 이유는 무엇입니까? 캐싱에서 성능이 충분히 좋아 졌습니까? – Sarel

+2

serialize/unserialize 함수는 가장자리의 경우를 처리하지 않습니다. Serializable 인터페이스를 구현하여 객체를 직렬화하는 방법을 정의하거나 올바르게 직렬화 할 수 있는지 여부를 정의해야합니다. 공용 속성 만있는 경우 __wakeup 메서드를 구현하여 연결을 다시 설정한다고 가정 해 보겠습니다. PDO 인스턴스를 캐싱하는 것이 성능 향상을 가져올 수 있다고 생각하지 않습니다. 캐시하려는 것은 처리 할 시간이 필요한 큰 데이터 구조 또는 큰 문자열입니다. – epicdev

+0

PDO에 대해 전혀 언급하지 말았어야했습니다. 큰 XML 파일을로드/파싱하는 오버 헤드로 인해 XML 캐싱에 관심이있었습니다. 템플릿 설정과 같은 다른 기능을위한 템플릿이든 템플릿이든 상관 없습니다. –