2012-06-12 2 views
2

내가 읽은 것부터 memcached를 사용하여 한 번에 1MB 이상의 값이나 데이터를 저장할 수 없습니다. 이 경우, 배열의 파일 크기를 memcached에 제출하기 전에 알아낼 수있는 방법이 있습니까?PHP memcached에 대한 배열의 파일 크기를 알아내는 방법

+0

배열의 파일 크기는 무엇을 의미합니까? – ajreal

+0

나는 op가 '배열의 크기'를 의미한다고 가정한다 ... 왜냐하면 파일 크기가 실제로이 컨텍스트에서는 의미가 없기 때문이다. – Wrikken

+0

어떤 압축 수준을 사용하고 계십니까? – ajreal

답변

1

Memcache를 유감 다른 방법을 생각할 수 없습니다 는 키/값 저장소입니다, 따라서 '하지 않습니다 '에 대해 더 알고 "복잡한" 개체. 모듈이하는 일은 값 &을 문자열로 저장하는 것입니다. 그래서 총 크기 = strlen(serialize($value));non-overloaded version of strlen 원하는 것을 유의하십시오!

+0

감사합니다. 나는 '함수 오버로딩 (Function Overloading)'에 대해 전혀 알지 못했지만,이 함수의 오버로드 된 버전을 사용하는 프로는 무엇입니까? – user1448020

+0

오버로드 된 메서드는 특히 utf8 문자열에 유용합니다. 것은, 그것은 고전적인 strlen보다 3 배 더 많은 공간에 각 캐릭터를 저장합니다. 이 스 니펫을 시도해보십시오 :'var_export (strlen ('ï'). '! =='.mb_strlen ('ï'));'. Memcache는 mb_ * 함수를 사용하여 그것들을 사용하면 잘못된 결과를 줄 것입니다;) – korko

-1

또는 당신은 strlen(serialize($array)); 가 아니면 쉬운 방법을 시도 복잡한 방법을 시도

$before = memory_get_usage(); 
$myarray = array(<content>); 
$size = memory_get_usage() - $before; 

+0

그리고'memory_get_usage()'호출 사이에서 GC가 발생하면 어떻게됩니까? – hafichuk

+0

팁 korko 주셔서 고마워요, 그 유용한 조각에 대해 알고 있지만 memcached 직렬화 된 문자열로 데이터를 저장하고 memcached 서버가 외부 컴퓨터에있을 수 있다고 생각하면 strlen (serialize ($ array)); 방법은 내가 얻으려고 노력하는 것을 위해 더 낫다. – user1448020

+0

hafichuk, GC는 무엇을 의미합니까? – user1448020

0

이 질문에 직접 대답하는 것은 아니지만 필요한 경우 1MB 제한을 더 큰 값으로 변경할 수 있습니다.

참조 : http://linux.die.net/man/1/memcached

는 각 슬래브 페이지의 기본 크기를 무시 -I. 기본값은 1MB입니다. 기본값은 1m, 최소값은 1k, 최대 값은 128m입니다. 이 값을 조정하면 항목 크기 제한이 변경됩니다. 이것은 또한 개의 슬랩 (보기 위해 -v 사용)과 memcached의 메모리 사용량이 증가합니다.

또한 압축을 활성화하여 값의 크기를 줄일 수도 있습니다. 참조 : http://ca.php.net/manual/en/memcache.setcompressthreshold.php

관련 문제