温馨提示×

如何配置Ubuntu PHP缓存机制

小樊
42
2025-12-10 14:33:02
栏目: 编程语言

Ubuntu PHP缓存机制配置指南

一 概览与选型

  • OPcache:PHP 内置的字节码缓存,减少脚本解析与编译,几乎是所有 PHP 应用的必选项。适用于提升脚本执行性能。
  • APCu:用户空间对象缓存,适合缓存计算结果、配置、字典数据等,常用于 CLI 与 FPM 场景。
  • Redis / Memcached:进程外内存数据缓存,适合页面片段、数据库查询结果、会话存储与跨进程共享数据。
  • 可选增强:Varnish / Nginx 反向代理缓存,缓存整页响应,进一步降低后端 PHP 压力。

二 配置步骤

  • 准备:确认 PHP 版本(如 7.4/8.0/8.1/8.2/8.3),后续路径与命令中的 {version} 请替换为实际版本。

    1. OPcache(字节码缓存,必配)
    2. 安装扩展:sudo apt update && sudo apt install php-opcache
    3. 编辑配置(按运行环境分别修改):
      • FPM:sudo nano /etc/php/{version}/fpm/php.ini
      • CLI:sudo nano /etc/php/{version}/cli/php.ini
    4. 写入或确认以下参数:
      [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
      
    5. 重启服务:
      • FPM:sudo systemctl restart php{version}-fpm
      • Apache:sudo systemctl restart apache2
    6. 验证:php -i | grep opcache | grep enable(应看到 opcache.enable => On)
    1. APCu(用户数据缓存)
    2. 安装:sudo apt install php-apcu
    3. 配置(按需添加到 FPM/CLI 的 php.ini):
      [apcu]
      extension=apcu.so
      apcu.enable_cli=1
      apcu.shm_size=64M
      apcu.ttl=7200
      
    4. 重启服务(同上)并可用 php -m | grep apcu 验证。
    1. Redis(键值缓存/会话/消息)
    2. 安装与启动:sudo apt install redis-server && sudo systemctl enable --now redis-server
    3. 安装 PHP 扩展:sudo apt install php-redis
    4. 配置(添加到 php.ini):extension=redis.so
    5. 重启服务(同上)。
    6. 简单用法示例:
      $redis = new Redis();
      $redis->connect('127.0.0.1', 6379);
      $key = 'my_cache_key';
      $data = $redis->get($key);
      if ($data === false) {
          $data = 'Hello, World!';
          $redis->setex($key, 3600, $data); // 1小时
      }
      echo $data;
      
    1. Memcached(分布式对象缓存)
    2. 安装与启动:sudo apt install memcached && sudo systemctl enable --now memcached
    3. 安装 PHP 扩展:sudo apt install php-memcached
    4. 配置(添加到 php.ini):extension=memcached.so
    5. 重启服务(同上)。
    6. 简单用法示例:
      $m = new Memcached();
      $m->addServer('127.0.0.1', 11211);
      $key = 'my_cache_key';
      $data = $m->get($key);
      if ($data === false) {
          $data = 'Hello, World!';
          $m->set($key, $data, 3600); // 1小时
      }
      echo $data;
      

三 多环境配置与验证

  • 同时运行 FPM 与 CLI 时,需分别修改 /etc/php/{version}/fpm/php.ini/etc/php/{version}/cli/php.ini;CLI 常用于 Composer/Artisan/CLI 脚本,建议开启 apcu.enable_cli=1
  • 验证要点:
    • OPcache:php -i | grep opcache.enable(应为 On
    • 扩展是否加载:php -m | grep -E 'opcache|apcu|redis|memcached'
    • 服务状态:systemctl is-active php{version}-fpm redis-server memcached

四 生产建议与参数调优

  • 必配组合:OPcache + APCu(进程内加速 + 用户数据缓存),动态站点再叠加 Redis/Memcached 做对象/会话缓存。
  • OPcache 关键参数建议:
    • opcache.memory_consumption:从 128 MB 起步,视项目体量调至 256 MB 或更高。
    • opcache.max_accelerated_files:建议 10000+,大型项目可提升到 40000
    • opcache.revalidate_freq:开发环境可设 0/1 便于调试;生产建议 60 秒以平衡性能与更新及时性。
  • 会话存储:将 PHP 会话改为 Redis/Memcached(减少文件锁与 I/O)。
  • 页面级缓存:在 Nginx/Apache 前加 Varnish 或使用 Nginx proxy_cache 缓存整页,进一步降低后端负载。

0