求助:查询Memcache存储数据量及解决单键存储超限问题
如何查看Memcache当前存储的数据量(附单键大小限制说明)
嘿,针对你的场景(Memcache 2.2.7 + PHP 5.6.35,配置了1GB总内存但单键限1MB),我整理了几种快速查看当前Memcache已用数据量的方法,顺便也提一下单键限制的小细节:
方法1:用命令行工具直接查询
Memcache自带了stats命令可以查看所有状态信息,包括已用内存。你可以用telnet或者nc(netcat)来连接服务器:
用telnet的步骤:
telnet <你的Memcache主机IP/域名> 11211
连接成功后输入stats并回车,你会看到一堆键值对,重点关注这两个字段:
bytes:当前已使用的内存字节数limit_maxbytes:你配置的总内存上限(就是你设置的1073741824字节)
把bytes换算成MB/GB就能知道当前用了多少,比如除以1024*1024得到MB数。
用nc快速查询(无需交互):
如果不想进入交互模式,直接用nc一次性输出结果:
echo stats | nc <你的Memcache主机IP/域名> 11211
同样找bytes和limit_maxbytes字段即可。
方法2:用PHP代码查询(贴合你的开发环境)
因为你用的是PHP,写个简单的脚本就能直接获取统计数据,不用切换到命令行:
<?php // 初始化Memcache连接 $memcache = new Memcache(); $connectionSuccess = $memcache->connect('你的Memcache主机IP/域名', 11211); if (!$connectionSuccess) { die("无法连接到Memcache服务器"); } // 获取统计信息 $stats = $memcache->getStats(); // 格式化输出 $usedMB = round($stats['bytes'] / 1024 / 1024, 2); $totalMB = round($stats['limit_maxbytes'] / 1024 / 1024, 2); $usagePercent = round(($stats['bytes'] / $stats['limit_maxbytes']) * 100, 2); echo "当前Memcache已使用内存: {$usedMB} MB\n"; echo "总配置内存: {$totalMB} MB\n"; echo "内存使用率: {$usagePercent}%\n"; // 关闭连接 $memcache->close(); ?>
把脚本里的主机地址换成你实际的,运行后就能看到清晰的统计结果。
关于单键1MB限制的补充
你提到单键无法存储超过1MB的数据,这个是Memcache的协议层面默认限制,和limit_maxbytes(总内存上限)无关。即使你把总内存设到1GB,单个键的值最大还是1MB。如果要存大于1MB的数据,常见的解决方案是:
- 拆分数据:把大对象/数组拆分成多个小键存储,比如按模块或分片拆分,读取时再合并
- 若可以切换扩展,考虑用
Memcached(注意带d的扩展),它支持通过配置调整单个键的大小限制,但你的PHP版本是5.6,需要提前确认扩展兼容性
内容的提问来源于stack exchange,提问作者Hardik Paghdar
相关产品推荐
相关产品推荐

