前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Memcached对于Key和Value的长度默认限制

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

作者头像
星哥玩云
发布于 2022-07-03 06:13:28
发布于 2022-07-03 06:13:28
7520
举报
文章被收录于专栏:开源部署开源部署

结论 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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP 扩展Memcached命令用法实例总结
这篇文章主要介绍了PHP 扩展Memcached命令用法,结合实例形式总结分析了PHP 扩展Memcached命令基本使用方法与相关操作注意事项,需要的朋友可以参考下
程序猿的栖息地
2022/04/29
2030
memcached服务
介绍 它是一套数据缓存系统或软件 用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用。它是通过预分配指定的内存空间来存储数据 定义 它是一个开源的、高性能的,具有分布式内存对象的缓存系统,它一般用来存储经常读取的对象或数据,如同web服务器会将一些内容缓存到客户端本地一样 mysql已经有cache了,为啥还要在它前面加一层memcached? memcached是一个key/value系统,系统相对于MySQL简单很多,虽然MySQL
用户1173509
2018/03/28
1.1K0
memcached服务
Memcached内存管理源码分析
memcached内存管理的模型与作业本“画格子给我们往格子里面写字”的逻辑很像,一个个作业本就是我们的内存空间,而我们往里写的字就是我们要存下来的数据,所以分析的时候可以想像一下用方格作业本写字的情景
JavaEdge
2019/02/15
5230
Memcached内存管理源码分析
【PHP小课堂】学习了解PHP中Memcached扩展的使用
说实话,在目前的开发环境中,使用 Memcache 的项目还真的不多。在 Redis 大行其道的今天,Memcache 的衰退也可以说是大势所趋。不过,可能很多刚开始学习 PHP 的新同学不知道,当年在 LAMP 时代,除了这四个字母所代表的这些服务端软件之外,缓存上最出名的就是这个 Memcache ,它和 PHP 搭配的历史也非常的长。
硬核项目经理
2024/05/21
1110
【PHP小课堂】学习了解PHP中Memcached扩展的使用
PHP无锁内存nosql---Yac的实战
  最近在工作使用了yac,所以比较了下Memcache和Yac的高并发读写性能测试,发现Yac要比Memcache快很多(这里没有比较Yac和Apc的性能情况, 不过据说Yac要比Apc快很多,Apc比Memcache快一倍)。
sunsky
2020/08/20
1.3K1
Memcached的LRU策略
从 Memcached1.5 开始,实现了一个改良的 LRU 算法,也叫做分段 LRU(Segmented LRU)算法,新算法主要是为了更好的利用内存,并提升性能。包含了二个重要的线程:maintainer 线程、crawler 线程。
tunsuy
2022/10/27
7360
memcache学习笔记
下载稳定版的memcache包,http://pecl.php.net/package/memcache
CS逍遥剑仙
2018/10/11
1.3K0
memcache学习笔记
PHP的SPL扩展库(一)数据结构
SPL 库也叫做 PHP 标准库,主要就是用于解决典型问题的一组接口或类的集合。这些典型问题包括什么呢?比如我们今天要讲的数据结构,还有一些设计模式的实现,就像我们之前讲过的观察者模式相关的接口在 SPL 库中都有提供。话说回来,在 PHP 中,由于语言的特点,其实很多数据结构都和我们用 C 语言实现的略有不同,比如说链表,由于没有结构的概念,所以我们一般会使用类来代表链表的结点。除了这个之外,要手写链表还需要链表的增、删、改、查等操作,而 SPL 库中其实已经帮我们提供了一个双向链表的实现,并且还可以在这个链表的基础上直接实现栈和队列的操作。
硬核项目经理
2021/09/24
1K0
简单了解Phar代码打包工具的使用
Phar 是在 PHP5 之后提供的一种类似于将代码打包的工具。本质上是想依照 Java 的 Jar 文件那种形式的代码包,不过本身由于 PHP 是不编译的,所以这个 Phar 实际上就是将代码原样的进行打包,不会进行编译。但是我们可以对打包的 Phar 包进行压缩操作。
硬核项目经理
2020/11/02
7930
简单了解Phar代码打包工具的使用
swoole如何对ip限制访问频率
在我们开发api的过程中,有的时候我们还需要考虑单个用户(ip)访问频率控制,避免被恶意调用。
北溟有鱼QAQ
2019/12/19
2.6K0
php扩展之memcache vs memcached
其中功能点1不够吸引人,PHP5版本之后,全线切OO编程,因此OO方法足够实现用户的直接使用,关键是功能点2。查阅资料可以得知,当网络抖动or部分服务临时不可用时,memcache扩展会主动的进行rehash,造成数据一致性问题,以一个简单的计数器(限流用)举例:
asfan
2019/08/24
8160
php扩展之memcache vs memcached
PHP操作Memcached的方法汇总
memcached非关系型数据库安装、php中的memcache的扩展安装、以及php中的memcached的扩展安装可以参考:
那一叶随风
2018/08/22
5620
PHP操作Memcached的方法汇总
Memcached 命令执行漏洞(CVE-2016-8704、CVE-2016-8705、CVE-2016-8706)简析
Author: p0wd3r, dawu (知道创宇404安全实验室) Date: 2016-11-01 0x00 漏洞概述 1.漏洞简介 Memcached是一个分布式的高速缓存系统,近日研究者发现在其<1.4.33的版本中存在三个整数溢出漏洞(http://blog.talosintel.com/2016/10/memcached-vulnerabilities.html),通过这几个漏洞攻击者可以触发堆溢出进而远程执行任意命令。官方在11月1日发布了升级公告。 2.漏洞影响 任意命令执行 3.影响版
Seebug漏洞平台
2018/03/29
2.9K0
Memcached 命令执行漏洞(CVE-2016-8704、CVE-2016-8705、CVE-2016-8706)简析
怎样用 PHP 来实现枚举?
是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。
猿哥
2019/04/24
2.7K0
Memcache内存分配机制
memcached 默认情况下采用了 Slab Allocator 的机制分配和管理内存. 在该机制出现之前内存分配简单的通过 malloc 和 free 来管理所有的记录, 旧的方式会导致产生很多内存碎片, 加重机器管理内存的负担, 甚至有可能导致操作系统比 memcached 进程本身还慢, Slab Allocator 则解决了该问题.
tunsuy
2022/10/27
7650
01 . Memcached原理,主从复制,代理,管理后台
使用目的: 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度,提高可扩展性
iginkgo18
2020/09/27
1.3K0
01 . Memcached原理,主从复制,代理,管理后台
关于Memcached对key和value的限制
Memcached中对于键(key)的限制为最大不超过250个字符。同时,对于存储的value最大可以接受的数据不能超过1MB。
魏杰
2022/12/23
4830
PHP笔记(一)
数据库项目作业要团队开发 web,选择了尝试后端,又向做出自己的网站这个目标踏出了一步。
赤蓝紫
2023/01/02
1.3K0
PHP笔记(一)
PHP中的一些杂项函数学习
今天来学习的这些杂项函数在官方文档中都是放在一个杂项扩展中的,其实这些函数都并不是什么什么特别的扩展,也不需要安装什么东西就可以使用,它们就是一些简单的功能函数而已。当然,其中不少内容也是我们经常会使用的,这里就带大家一起再学习学习。
硬核项目经理
2021/09/24
5040
PHP中的文件系统函数(二)
这次我们来学习的是一些不是太常用,但却也非常有用的一些函数。它们中有些大家可能见过或者使用过,有一些可能就真的没什么印象了。它们都是 PHP 中文件系统相关操作函数的一部分。存在即合理,或许只是我们的业务开发中还没有接触到而已。不管别的,先混个脸熟,在真正需要它们的时候你能马上想起来 PHP 就自带一个这样的函数就可以了。
硬核项目经理
2021/03/16
1K0
相关推荐
PHP 扩展Memcached命令用法实例总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档