2013-05-28 24 views
0

下面的代碼PHP Memcached的字符串大小超過

$memcached = new Memcached(); 

$memcached->addServer('127.0.0.1', 11211); 

$data = json_encode(array(
     'string1' => md5(time()), 
     'string2' => md5(time()) 
)); 

var_dump($memcached->set('foo', $data, 300)); 

工作就好

# telnet 127.0.0.1 11211 
# get foo 
VALUE foo 0 91 
{"string1":"884e036fd865cac1ef26b5f7a920c2c2","string2":"884e036fd865cac1ef26b5f7a920c2c2"} 

,但是當我加入三線

$data = json_encode(array(
     'string1' => md5(time()), 
     'string2' => md5(time()), 
     'string3' => md5(time()) 
)); 

var_dump($memcached->set('foo', $data, 300)); 

它產生以下

# get foo 
VALUE foo 16 63 
x«V*.)ÊÌK7T²RJ322J11KL6M4I4OM¶°H57·4716I5Oµ0NSÒ*6"E±11krW&z 

我猜memcached是以某種方式壓縮這個值,但是爲什麼它不是在恢復它呢?

任何想法如何解決它?

+0

如何解決?你有沒有試圖在PHP中檢索它? – zerkms

+0

最後我需要一個JSON字符串。目前它不是JSON,你可以看到。 – Aley

+0

您是否嘗試過使用PHP重新獲取數據? – Putr

回答

2

是因爲cliphp使用不同的選項

Memcached::OPT_COMPRESSION is true by default 

From PHP DOC

啓用或禁用淨載荷壓縮。啓用時,項目值超過某個閾值(當前爲100個字節)將在存儲期間被壓縮,並在透明地恢復期間被解壓縮。

Memcached::set

的值可以是除了資源任何有效的PHP類型,因爲那些不能在序列化形式來表示。如果Memcached :: OPT_COMPRESSION選項打開,則序列化值在存儲之前也將被壓縮。

它特定的長度後,對數據進行壓縮...這就是爲什麼當你試圖從遠程登錄數據,你看不到json而是compressed version

相關問題