阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Memcached对于Key和Value的长度默认限制

119次阅读
没有评论

共计 3012 个字符,预计需要花费 8 分钟才能阅读完成。

结论
Memcached 默认对 Key 和 Value 长度做如下限制:

Key 字符串的长度不能超过 255 个字符;
Value 字符串的长度不能超过 1024 * 1024 个字符, 即存储数据不能超过 1M;
推荐使用默认配置, 也可以通过直接修改 memcached.h 源码来加大长度限制.

// memcached.h#define KEY_MAX_LENGTH 1000#define MAX_ITEM_SIZE  (1024 * 1024 * 2)也可以启动 Memcached 时通过 - I 参数来配置:

-I            Override the size of each slab page. Adjusts max item size
              (default: 1mb, min: 1k, max: 128m)源码分析
// memcached.h
#define KEY_MAX_LENGTH 255
#define MAX_ITEM_SIZE  (1024 * 1024)// flat_storage.c
/**
 * Returns true if an item will fit in the cache (its size does not exceed
 * the maximum for a cache entry.)
 */
bool item_size_ok(const size_t nkey, const int flags, const int nbytes) {
    return (nkey <= KEY_MAX_LENGTH) && (nbytes <= MAX_ITEM_SIZE);
}//memcached.c
//…
        if (! item_size_ok(nkey, flags, vlen))
            out_string(c, “SERVER_ERROR object too large for cache”);
        else
            out_string(c, “SERVER_ERROR out of memory”);
//… 测试
测试用例如下:

<?php/**
 * @version  1.0
 * @author  wade
 * @date    2013-12-08
 */
 
ini_set(‘memory_limit’,’512M’);
 
$mCached=new Memcached();$mCached->addServer(‘127.0.0.1’,7503);// 当开启的时候, item 的值超过某个阈值 (当前是 100bytes) 时, 会首先对值进行压缩然后存储, 并在获取该值时进行解压缩然后返回, 使得压缩对应用层透明. 默认 Memcached 开启压缩功能. 此处为了测试, 需要暂时先关闭压缩功能.$ret=$mCached->setOption(Memcached::OPT_COMPRESSION,FALSE);var_dump($mCached->getOption(Memcached::OPT_COMPRESSION));
 
$key=’memcached_test’;
 
$ret=$mCached->delete($key);var_dump($ret);
 
$ret=$mCached->get($key);var_dump($ret);
 
$values=array();// 为什么是 85 呢, 因为存储 $value 数据需要额外存储其它元素数据, 包括 key, 管理信息 // 每记录需要内存数 = key 长度 + value 长度 + 管理信息(64 字节 + 1~9 字节的 value size 的字符数).// 14 + 1024 * 1024 – 85 + 1 + 64 + 7 = 1024 * 1024 + 1for($i=0;$i<1024*1024-85+1;$i++){$values[]=1;}
 
$value=implode(”,$values);echostrlen($value).PHP_EOL;
 
$ret=$mCached->set($key,$value,10);var_dump($ret);
 
$ret=$mCached->get($key);var_dump($ret);
 
$values=array();// 为什么是 85 呢, 因为存储 $value 数据需要额外存储其它元素数据, 包括 key, 管理信息 for($i=0;$i<1024*1024-85;$i++){$values[]=1;}
 
$value=implode(”,$values);echostrlen($value).PHP_EOL;
 
$ret=$mCached->set($key,$value,10);var_dump($ret);
 
$ret=$mCached->get($key);var_dump($ret); 测试结果:

[user_00@srv-10 ~/wade/20131206]$ /usr/local/php/bin/php memcachedTest.php
bool(false)
bool(false)
bool(false)
1048492
bool(false)
bool(false)
1048491
bool(true)
string(1048491) “11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Memcached 安装及启动脚本 http://www.linuxidc.com/Linux/2013-07/87641.htm

PHP 中使用 Memcached 的性能问题 http://www.linuxidc.com/Linux/2013-06/85883.htm

Ubuntu 下安装 Memcached 及命令解释 http://www.linuxidc.com/Linux/2013-06/85832.htm

Memcached 的安装和应用 http://www.linuxidc.com/Linux/2013-08/89165.htm

使用 Nginx+Memcached 的小图片存储方案 http://www.linuxidc.com/Linux/2013-11/92390.htm

Memcached 使用入门 http://www.linuxidc.com/Linux/2011-12/49516p2.htm

Memcached 的详细介绍:请点这里
Memcached 的下载地址:请点这里

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计3012字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中