PHP Memcached字符串大小超过

PHP Memcached字符串大小超过,php,memcached,telnet,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)); 工作正常吗 # tel

下面的代码

$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上恢复它呢


知道怎么解决吗?

是的,因为
cli
php
使用不同的选项

 Memcached::OPT_COMPRESSION is true by default 

启用或禁用有效负载压缩。启用时,超过某个阈值(当前为100字节)的项值将在存储期间压缩,并在检索期间透明地解压缩

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


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

是,因为
cli
php
使用不同的选项

 Memcached::OPT_COMPRESSION is true by default 

启用或禁用有效负载压缩。启用时,超过某个阈值(当前为100字节)的项值将在存储期间压缩,并在检索期间透明地解压缩

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

它压缩特定长度后的数据。。。这就是为什么当您试图从telnet获取数据时,您看不到
json
,而是
压缩版本的原因。根据来源:压缩可以是
fastlz
zlib

其值由
memcached.compression\u type
configuration指令()指定

根据来源:压缩可以是
fastlz
zlib

其值由
memcached.compression\u type
configuration指令()指定


如何解决什么问题?你试过在php中检索它吗?我需要在最后有一个JSON字符串。目前它不是您可以看到的JSON。您尝试过用PHP检索数据吗?@Aley:在telnet中它不是JSON,因为没有人向您保证客户端(PHP扩展)存储它的格式。@Aley:任意客户端可以自由使用任何格式,甚至gzip。如何解决什么?你试过在php中检索它吗?我需要在最后有一个JSON字符串。目前它不是您可以看到的JSON。您是否尝试过使用PHP检索数据?@Aley:在telnet中它不是JSON,因为没有人向您保证客户端(PHP扩展)存储它的格式。@Aley:任意客户端都可以自由使用任何格式,即使是gzip。