关于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吗的更多相关文章

  1. Memcached启动、关闭参数(摘录)

    启动参数注释如下: -p <num>  指定服务TCP端口,默认为11211 -U <num>   指定服务UDP端口  默认11211表示打开,设置0表示关闭 -s < ...

  2. 基于Memcached分布式系统DRDoS拒绝服务攻击技术研究(转)

    本次反射式拒绝服务攻击技术基于全球互联网分布式的Memcached服务器,需要储备一定得安全攻防知识,网络协议知识和python代码编程技术.希望在学习本篇文章知识前自行学习相关的基础知识,文章后面同 ...

  3. 第三方缓存软件memcached和redis异同

    memcached和redis相同点:都是以键值对的形式来存储数据,通俗讲就是一个大的hashtable缓存数据都是存在内容中 key-value 不同点:memcached:1.一个key所对应的值 ...

  4. memcached的内存管理与删除机制

    memcached的内存管理与删除机制 简介 注意:Memcache最大的value也只能是1M的空间,超过1M的数据无法保存(修改memcache源代码).   注意:内存碎片化永远都存在,只是哪一 ...

  5. Redis和Memcached到底有什么区别?

    前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之快.但我们在开发过程中,这两个内存数据库,我们到底要如何选择呢?它们的优劣都有哪些?为什么现在看Redis要比Mem ...

  6. 为什么Redis要比Memcached更火?

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之快.但我们 ...

  7. redis和memcached

    Redis 1.主从配置(主从复制不会阻塞master.) 1)bind  192.168.1.2(请修改成本机的IP地址,要不然,客户端无法进行访问) 2)slaveof 192.168.1.1 6 ...

  8. Memcached介绍及相关知识

    memcached简介 1.memcached是一个免费开源的.高性能的,具有分布式内存对象的缓存系统.memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括 ...

  9. Redis .NET操作

    Redis是一个支持数据结构更多的键值对数据库.它的值不仅可以是字符串等基本数据类型,也可以是类对象,更可以是Set.List.计数器等高级的数据结构. Memcached也可以保存类似于Set.Li ...

随机推荐

  1. POJ1061青蛙的约会

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  2. NOIP2014D2T2寻找道路(Spfa)

    洛谷传送门 这道题可以把边都反着存一遍,从终点开始深搜,然后把到不了的点 和它们所指向的点都去掉. 最后在剩余的点里跑一遍spfa就可以了. ——代码 #include <cstdio> ...

  3. 最近切的两题SCC的tarjan POJ1236 POJ2186

    两题都是水题,1236第一问求缩点后入度为0的点数,第二问即至少添加多少条边使全图强连通,属于经典做法,具体可以看白书 POJ2186即求缩点后出度为0的那个唯一的点所包含的点数(即SCC里有多少点) ...

  4. CodeForces - 601A The Two Routes

    http://codeforces.com/problemset/problem/601/A 这道题没想过来, 有点脑筋急转弯的感觉了 本质上就是找最短路径 但是卡在不能重复走同一个点 ----> ...

  5. 用DW制作简单的浮动广告

    原文发布时间为:2008-11-08 -- 来源于本人的百度文章 [由搬家工具导入] 浮动广告可以用层和时间轴结合做出,先选择你的dreamweaver“窗口”,然后从“窗口”菜单中选择“时间轴”,时 ...

  6. HDU 4436 (后缀自动机)

    HDU 4436 str2int Problem : 给若干个数字串,询问这些串的所有本质不同的子串转换成数字之后的和. Solution : 首先将所有串丢进一个后缀自动机.由于这道题询问的是不同的 ...

  7. 从零开始写STL—模板元编程之any

    any class any; (since C++17) The class any describes a type-safe container for single values of any ...

  8. [Bzoj1030][JSOI2007]文本生成器(AC自动机)(dp)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5254  Solved: 2172[Submit][Stat ...

  9. UESTC 1087 【二分查找】

    问了某明==shit 中文题意不解释. 因为数据的范围是1e9以内的所以我们可以通过二分的方法枚举可能的中位数. 用二分法每次判断某一数字比中位数大还是比中位数小. 判断方法是,枚举以第n个数为起点的 ...

  10. Python 基础语法(和Java相比)

    Python变量和数据类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ...