首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Memcached字符串大小超过

PHP Memcached字符串大小超过
EN

Stack Overflow用户
提问于 2013-05-29 06:02:19
回答 2查看 609关注 0票数 0

下面的代码

代码语言:javascript
复制
$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));

工作正常吗?

代码语言:javascript
复制
# telnet 127.0.0.1 11211
# get foo
VALUE foo 0 91
{"string1":"884e036fd865cac1ef26b5f7a920c2c2","string2":"884e036fd865cac1ef26b5f7a920c2c2"}

但是当我添加第三行时

代码语言:javascript
复制
$data = json_encode(array(
        'string1' => md5(time()),
        'string2' => md5(time()),
        'string3' => md5(time())
));

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

它会产生以下结果

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

我猜memcached以某种方式压缩了值,但是为什么它不在get上恢复它呢?

你知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-29 06:08:02

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

代码语言:javascript
复制
 Memcached::OPT_COMPRESSION is true by default 

From PHP DOC

启用或禁用负载压缩。开启后,大于某一阈值(当前为100字节)的项值将在存储过程中被压缩,在检索过程中被透明地解压缩。

Memcached::set

PHP值可以是除资源之外的任何有效

类型,因为这些类型不能以序列化形式表示。如果打开了Memcached::OPT_COMPRESSION选项,则序列化后的值也将在存储之前进行压缩。

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

票数 3
EN

Stack Overflow用户

发布于 2013-05-29 06:53:39

根据消息来源:https://github.com/php-memcached-dev/php-memcached/blob/master/php_memcached.c#L2918压缩可以是fastlzzlib

它的值由memcached.compression_type配置指令(https://github.com/php-memcached-dev/php-memcached/blob/master/php_memcached.c#L298)指定

http://www.php.net/manual/en/memcached.configuration.php#ini.memcached.compression-type

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16802228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档