You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:查询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:56