2012-06-12 59 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

謝謝你Wrikken!我從來不知道'函數重載',使用這些函數的重載版本的pro/con有什麼用途? – 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

如果GC在'memory_get_usage()'調用之間發生,會發生什麼? – 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