ubuntu lamp缓存机制详解
导读:Ubuntu LAMP 缓存机制全景与落地配置 一、缓存分层与适用场景 浏览器与 CDN 层:通过 Cache-Control / Expires 控制资源在客户端与边缘节点的缓存时效,适合图片、CSS、JS、视频等静态资源,显著降低往返...
Ubuntu LAMP 缓存机制全景与落地配置
一、缓存分层与适用场景
- 浏览器与 CDN 层:通过 Cache-Control / Expires 控制资源在客户端与边缘节点的缓存时效,适合图片、CSS、JS、视频等静态资源,显著降低往返延迟与源站压力。
- Web 服务器层(Apache):使用 mod_expires 设置资源过期策略;使用 mod_cache / mod_cache_disk 对可缓存响应做反向代理式页面/片段缓存,适合高并发读多写少场景。
- PHP 层:启用 OPcache 缓存字节码;使用 APCu 做用户态数据缓存;使用 Memcached/Redis 做对象/会话/页面片段缓存,适合降低数据库与业务计算压力。
- 数据库层(MySQL):以 InnoDB Buffer Pool 为核心的数据与索引缓存;传统 Query Cache 已在 MySQL 8.0 移除,5.7.20 起弃用,需改用其他优化手段(如 ProxySQL、查询重写、合理索引)。
二、Apache 层缓存配置
- 启用并配置浏览器缓存(mod_expires)
- 启用模块:sudo a2enmod expires
- 站点或全局配置示例:
< IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 2 months" ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/png "access plus 1 year" < /IfModule> - 作用:在响应头写入 Expires / Cache-Control,指导浏览器与 CDN 缓存策略。
- 启用并配置页面/片段缓存(mod_cache_disk)
- 启用模块:sudo a2enmod cache;sudo a2enmod cache_disk
- 配置示例(仅缓存静态资源路径,避免误缓存含会话的动态页):
< IfModule mod_cache.c> < IfModule mod_cache_disk.c> CacheEnable disk /static/ CacheRoot /var/cache/apache2/mod_cache_disk CacheDirLevels 2 CacheDirLength 1 CacheDefaultExpire 3600 CacheIgnoreHeaders Set-Cookie CacheIgnoreNoLastMod On < /IfModule> < /IfModule> - 要点:对含 Set-Cookie、个性化或频繁变更的内容禁用缓存;必要时结合 Vary 头控制变体。
- 验证:重启 Apache 后,用 curl -I 检查 Cache-Control / Expires / X-Cache 等头部是否生效。
三、PHP 层缓存配置
- OPcache(字节码缓存,强烈建议开启)
- 安装:sudo apt install php-opcache
- 生产建议配置(/etc/php/7.x/apache2/php.ini 或 fpm/php.ini):
[opcache] opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=20000 opcache.validate_timestamps=0 ; 生产建议关闭,用部署流程触发刷新 opcache.revalidate_freq=0 ; 与上行配合,文件变更由部署脚本重置 opcache.fast_shutdown=1 - 作用:避免每次请求解析/编译 PHP 脚本,显著降低 CPU 与 I/O。
- APCu(用户态数据缓存)
- 安装:sudo apt install php-apcu
- 配置示例:
[apcu] extension=apcu.so apcu.enable_cli=0 apcu.shm_size=64M apcu.ttl=7200 - 适用:配置项、计算结果、局部页面片段等短期/中期数据。
- Memcached / Redis(对象/会话/页面片段缓存)
- 安装与启用:
# Memcached sudo apt install memcached php-memcached # Redis sudo apt install redis-server php-redis sudo systemctl restart php**7.x**-fpm - 适用:会话存储、热点数据、API 结果、全页或片段缓存(配合框架或自研逻辑)。
- 安装与启用:
四、MySQL 层缓存与优化
- InnoDB Buffer Pool(核心数据/索引缓存)
- 建议:在不超过物理内存与系统预留的前提下,将 innodb_buffer_pool_size 设为可用内存的较大比例(如 50%–70%,视业务而定),可显著减少磁盘 I/O。
- 示例:innodb_buffer_pool_size=1G(请结合实例规格与并发调优)。
- Query Cache(历史特性)
- 状态:自 MySQL 5.7.20 起弃用,MySQL 8.0 已移除;不建议依赖。
- 替代:优化索引与 SQL、读写分离、连接池、使用 ProxySQL 做查询缓存/路由与结果集复用等。
五、部署与验证要点
- 配置生效与平滑更新
- Apache:sudo systemctl restart apache2
- PHP-FPM:sudo systemctl restart php7.x-fpm
- 变更 OPcache 后,生产环境可通过重启 PHP-FPM 或部署脚本触发重置(不建议频繁开启 validate_timestamps)。
- 验证方法
- 浏览器/网关:curl -I 查看 Cache-Control / Expires / Age / X-Cache 等头部;命中时 Age 递增。
- OPcache:php -r ‘var_dump(opcache_get_status()); ’ 查看命中率与缓存状态。
- MySQL:SHOW ENGINE INNODB STATUS\G 观察缓冲池命中与读写情况;结合性能模式/慢查询定位瓶颈。
- 缓存失效与更新策略
- 静态资源:采用 文件名哈希/版本号(如 app.a1b2c3.js)解决更新后缓存不失效问题。
- 页面/片段:为可缓存内容设置合理 max-age,变更时通过 Cache-Control: no-cache / must-revalidate 或主动清理后端缓存。
- OPcache:部署流程中执行 opcache_reset() 或重启 PHP-FPM,避免脏字节码。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu lamp缓存机制详解
本文地址: https://pptw.com/jishu/777243.html
