码迷,mamicode.com
首页 > 系统相关 > 详细

memcached value最大限制只能是1M吗

时间:2018-10-17 00:28:12      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:源码   var   127.0.0.1   get   根据   compress   items   cas   res   

关于memcached的value最大是1M的限制很多人都知道,但是如果你以为我还要说这个事情,那你就错了。

之前的老版本确实是只能是1M,但是根据git记录,其实2009年以后的版本这个value最大值已经是可配置的了,但是目前互联网上大多数资料,调整value最大值的方法还是去改源码。

首先看下memcached的启动参数


memcached --help | grep max-item-size

-I, --max-item-size=<num> adjusts max item size
1
2
3
4
5
在跟踪的源码(略去了无关配置项),memcached.c


static void settings_init(void) {
……
settings.item_size_max = 1024 * 1024; /* The famous 1MB upper limit. */
……
}
1
2
3
4
5
6
7
测试下


memcached --max-item-size=3145728 // 3M
1
2
3

ini_set(‘memcached.compression_threshold‘, 1024 * 1024 * 3); // 调高 php memcached扩展压缩阀值


$m = new Memcached();
$m->addServer(‘127.0.0.1‘, 11211);
$str = ‘‘;
$len = 1024 * 1024 * 2;
for ($i = 0; $i < $len; $i++) {
$str .= ‘v‘;
}
$m->set(‘k‘, $str);
echo strlen($m->get(‘k‘));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
最后,虽然这个参数是可调整,但是还是建议用默认值,如果真的超过出现了超过1M的value,首先试试压缩(php memcached 扩展,在value超过2000的时候,默认使用fastlz压缩),如果还是大于1M,就把value分割,然后读的时候使用批量获取,比如php使用getMulti。


<?php
$m = new Memcached();
$m->addServer(‘localhost‘, 11211);
$items = array(
‘key1‘ => ‘value1‘,
‘key2‘ => ‘value2‘,
‘key3‘ => ‘value3‘
);
$m->setMulti($items);
$result = $m->getMulti(array(‘key1‘, ‘key3‘, ‘badkey‘), $cas);
var_dump($result, $cas);
?>
---------------------
作者:安木1991
来源:CSDN
原文:https://blog.csdn.net/weixin_42900065/article/details/81513199?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

memcached value最大限制只能是1M吗

标签:源码   var   127.0.0.1   get   根据   compress   items   cas   res   

原文地址:https://www.cnblogs.com/ExMan/p/9800821.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!