apache内存缓存通过mod_mem_cache模块将高频静态资源(如css、js、小图标)驻留内存,避免磁盘i/o和后端重复执行,配合客户端缓存可实现零服务器压力的后续访问。

Apache 内存缓存能显著加快静态资源和部分动态内容的响应速度,核心是把高频访问的内容直接保留在服务器内存中,避免反复读磁盘或执行后端逻辑。关键不在于“全开”,而在于选对模块、设好边界、避开常见陷阱。
启用 mod_mem_cache 并配置基础参数
Apache 的内存缓存由 mod_mem_cache 模块实现(注意:不是 mod_cache 本身,而是其内存后端)。需先确认模块已加载:
- 检查
httpd.conf或apache2.conf中是否包含:LoadModule mem_cache_module modules/mod_mem_cache.so - 若使用 Debian/Ubuntu 系统,可运行:
sudo a2enmod mem_cache - 接着添加如下基础配置(建议放在全局或虚拟主机段):
CacheEnable mem / MCacheSize 131072 MCacheMaxObjectCount 20000 MCacheMinObjectSize 10 MCacheMaxObjectSize 1048576 MCacheRemovalAlgorithm LRU
说明:MCacheSize 单位是 KB,这里设为 128MB;LRU 比默认 GDSF 更易预测,适合多数场景;MCacheMaxObjectSize 控制单个文件上限(如图片、JS),避免大文件挤占空间。
只缓存真正适合的内容类型
内存宝贵,不能无差别缓存。应聚焦在体积适中、访问频繁、变化不频繁的资源上:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 优先缓存:
.css、.js、.html(静态页)、小图标(.png/.gif,建议限制在 1MB 内) - 明确排除:
.php、.jsp等动态脚本(除非你确认它们输出稳定且无用户态数据);大媒体文件(视频、高清图);含敏感信息的页面(如登录后仪表盘) - 可通过
LocationMatch精确控制范围,例如:
<locationmatch>
CacheIgnoreHeaders Set-Cookie
CacheIgnoreNoLastMod On
</locationmatch>
配合客户端缓存形成协同效应
内存缓存解决的是“服务器再生成一次”的开销,而浏览器缓存解决的是“用户再请求一次”的开销。两者叠加效果更明显:
- 用
mod_expires设置强缓存头,让浏览器长期复用本地副本:
<ifmodule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType image/png "access plus 1 week"
</ifmodule>
这样,首次请求走 Apache 内存缓存,后续请求直接由浏览器返回——服务器零压力。
监控与调优要点
上线后别忘了验证效果和防止失控:
- 通过
mod_status(启用ExtendedStatus On)查看cache_info页面,观察mem_cache的命中率、当前对象数、内存使用量 - 如果命中率长期低于 60%,说明缓存策略可能太窄(比如没覆盖关键资源)或对象过期太快
- 如果内存使用持续接近
MCacheSize上限,考虑调低MCacheMaxObjectCount或增加淘汰倾向(如改用更激进的LRU参数) - 避免与
mod_disk_cache共用同一路径或 URL 前缀,否则易引发冲突或冗余写入










