PHP Memcached字符串大小超过

时间:2013-05-28 22:02:19

标签: php memcached telnet

以下代码

$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正在某种程度上压缩这个值,但是为什么它不能在get上恢复它?

知道怎么解决吗?

2 个答案:

答案 0 :(得分:2)

是的,因为cliphp正在使用不同的选项

 Memcached::OPT_COMPRESSION is true by default 

From PHP DOC

  

启用或禁用有效负载压缩。启用后,将在存储期间压缩长于特定阈值(当前为100字节)的项目值,并在检索期间透明地解压缩。

Memcached::set

  

除了资源之外,值可以是任何有效的PHP类型,因为它们不能以序列化形式表示。如果打开 Memcached :: OPT_COMPRESSION 选项,则序列化值也将在存储之前进行压缩。

它会在特定长度后压缩数据...这就是为什么当您尝试从telnet获取数据时,您看不到json而是compressed version

答案 1 :(得分:1)