温馨提示×

如何利用Ubuntu PHP进行缓存优化

小樊
36
2025-12-28 06:43:02
栏目: 编程语言

Ubuntu PHP 缓存优化实操指南

一 分层缓存总体策略

  • 建议按“代码层→对象层→边缘层→存储层”组合使用缓存,兼顾性能与一致性:
    • 代码层:OPcache(字节码缓存,减少编译开销,适用于所有 PHP 应用,建议默认开启)。
    • 对象层:APCu(用户态键值缓存,适合计算结果、配置、片段)、Redis/Memcached(高性能键值存储,常作对象缓存与会话存储后端)。
    • 边缘层:Varnish / Nginx 反向代理缓存(整页/片段缓存,适合匿名流量、静态资源与可缓存 API)。
    • 存储层与浏览器:Apache mod_expires/mod_file_cache(资源客户端缓存)、静态资源上 CDN,必要时配合磁盘/SSD 层加速。以上方案可按场景叠加,避免单点优化。

二 快速落地步骤

  • 安装与启用 OPcache(必开)
    • 安装:sudo apt update && sudo apt install php-opcache
    • 编辑对应 PHP 版本的 ini(如:/etc/php/8.1/apache2/php.ini/etc/php/8.1/fpm/php.ini),加入/确认:
      • [opcache]
      • zend_extension=opcache.so
      • opcache.enable=1
      • opcache.memory_consumption=128
      • opcache.interned_strings_buffer=8
      • opcache.max_accelerated_files=10000
      • opcache.revalidate_freq=60
      • opcache.fast_shutdown=1
    • 重启服务:sudo systemctl restart apache2php8.1-fpm
  • 安装与启用 APCu(用户缓存)
    • 安装:sudo apt install php-apcu
    • 配置(php.ini):
      • [apcu]
      • apcu.enable=1
      • apcu.shm_size=64M
      • apcu.ttl=7200
      • apcu.enable_cli=0(生产 CLI 建议关闭,避免污染缓存)
  • 安装与启用 Redis/Memcached(外部对象缓存与会话)
    • 安装:sudo apt install redis-server php-redis;或 sudo apt install memcached php-memcached
    • 启用:多数发行版包已自动启用扩展;如需手动,在 php.ini 加入 extension=redis.so 或 extension=memcached.so
    • 验证服务:sudo systemctl status redis-server / memcached
    • 基本连通性测试(PHP):
      • Redis:$redis = new Redis(); $redis->connect(‘127.0.0.1’, 6379); $redis->set(‘k’,‘v’,3600);
      • Memcached:$m = new Memcached(); $m->addServer(‘127.0.0.1’, 11211); $m->set(‘k’,‘v’,3600);
    • 扩展选择:PHP 7+ 推荐使用带“d”的 memcached 扩展;老旧的 memcache 扩展不适用于 PHP 7。

三 配置与应用示例

  • 会话存储到 Redis/Memcached(php.ini)
    • session.save_handler=redismemcached
    • session.save_path=tcp://127.0.0.1:6379127.0.0.1:11211
  • 框架与 CMS 示例
    • WordPress:安装 Redis Object Cache 插件(需已安装 php-redis);多站点建议设置 WP_CACHE_KEY_SALT 隔离缓存命名空间。
    • Laravel/Symfony:在 .env 或框架配置中设置缓存驱动为 redis,并配置连接参数(host、port、database、password)。
  • HTTP 层缓存示例(Nginx 反向代理缓存)
    • 在 http/server/location 中配置:
      • proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
      • location / { proxy_pass http://127.0.0.1:8080; proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; }
  • 浏览器与静态资源缓存(Apache)
    • 启用模块:a2enmod expires headers
    • 配置示例:
      • ExpiresActive On
      • ExpiresByType text/css “access plus 1 week
      • ExpiresByType application/javascript “access plus 1 week
      • ExpiresByType image/png “access plus 1 month
      • Header always set Cache-Control “public, max-age=31536000, immutable” env=!NO_CACHE

四 验证与运维要点

  • 验证是否生效
    • PHP 层:创建 phpinfo.php),查看 OPcache/APCu/Redis/Memcached 模块与配置;注意 CLI 与 FPM 可能使用不同 php.ini,需分别检查。
    • 数据层:运行简单脚本验证 set/get 命中;Memcached 可用 telnet localhost 11211 执行 stats/flush_all 辅助排查。
    • HTTP 层:curl -I 检查 Cache-Control/ExpiresX-Cache/Varnish 等头。
  • 多版本 PHP 并存
    • 确保扩展安装到正确的版本目录(如 /etc/php/8.1//etc/php/8.2/),并分别重启对应服务。
  • 安全
    • Redis 默认无鉴权,生产环境请启用 requirepass 与绑定内网 IP;Memcached 建议仅监听 127.0.0.1 或内网。
  • 监控与容量
    • 关注命中率、内存占用与驱逐(evictions);Redis 可用 INFO/慢查询日志,Memcached 用 stats;必要时调大内存或优化 TTL/键设计

五 参数调优与常见坑

  • OPcache 关键参数建议
    • opcache.memory_consumption:从 128 MB 起步,视应用体量调至 256 MB 或更高。
    • opcache.max_accelerated_files:建议 10000+,大型项目可更高(如 40000)。
    • opcache.revalidate_freq:60 s 平衡“变更可见性”与“文件系统检查开销”;频繁发布可临时降低。
    • opcache.save_comments=1(保留注释,利于框架/注解与反射)。
  • APCu 关键参数建议
    • apcu.shm_size:从 64 MB 起步,热点多时可至 128 MB 或更高。
    • apcu.ttl:业务允许下设置 7200 s 左右;对强一致数据使用较短 TTL 或主动失效。
    • apcu.enable_cli=0(生产 CLI 关闭,避免与 FPM 缓存不一致)。
  • 数据库层注意
    • MySQL 5.7.20 起弃用查询缓存,8.0 已移除;高读场景请用 Redis/Memcached 做结果缓存,数据库侧优先优化 InnoDB Buffer Pool 等内存结构。

0