Ubuntu下PHP配置缓存的常见方法及步骤
在Ubuntu系统中,PHP缓存主要通过OPcache(内置字节码缓存)、APCu(用户数据缓存)、**Redis/Memcached(分布式内存缓存)**三类方式实现,以下是详细配置指南:
OPcache是PHP 5.5+的内置扩展,用于缓存预编译的字节码,减少脚本加载和解析时间,显著提升PHP执行效率。
大多数Ubuntu版本的PHP已默认包含OPcache,若未安装可通过以下命令添加:
sudo apt update
sudo apt install php-opcache
编辑PHP配置文件(根据使用场景选择CLI或FPM配置文件,如PHP 8.1):
sudo nano /etc/php/8.1/cli/php.ini # 命令行模式
sudo nano /etc/php/8.1/fpm/php.ini # PHP-FPM模式
在文件中添加/修改[opcache] section(关键参数说明见注释):
[opcache]
zend_extension=opcache.so # 启用OPcache扩展(必须)
opcache.enable=1 # 开启字节码缓存
opcache.memory_consumption=128 # 分配给OPcache的内存大小(MB,根据服务器调整)
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小(MB)
opcache.max_accelerated_files=10000 # 最大缓存文件数(根据项目文件数量调整)
opcache.revalidate_freq=60 # 脚本更新检查间隔(秒,生产环境建议60-300)
opcache.fast_shutdown=1 # 启用快速关闭,减少进程重启时间
opcache.enable_file_override=0 # 禁止覆盖文件缓存(提升安全性)
若使用PHP-FPM,重启服务使配置生效:
sudo systemctl restart php8.1-fpm
若使用Apache/Nginx,需重启Web服务器:
sudo systemctl restart apache2 # Apache
sudo systemctl restart nginx # Nginx
创建info.php文件(/var/www/html/info.php),内容为:
<?php phpinfo(); ?>
浏览器访问http://服务器IP/info.php,搜索“opcache”确认以下信息:
opcache.enable显示为On;APCu是OPcache的补充,用于缓存用户数据(如数据库查询结果、会话信息),仅适用于当前请求的PHP进程。
sudo apt update
sudo apt install php-apcu
编辑PHP配置文件(同OPcache路径):
[apcu]
extension=apcu.so # 启用APCu扩展
apcu.enable_cli=1 # 允许CLI模式下使用(开发调试需要)
apcu.shm_size=64M # 分配的共享内存大小(MB,根据缓存需求调整)
apcu.ttl=3600 # 缓存项生存时间(秒,默认0=永不过期)
apcu.enable_shm_config=1 # 启用共享内存配置
sudo systemctl restart php8.1-fpm
# 若使用Web服务器,需重启Apache/Nginx
创建测试脚本apcu_test.php:
<?php
$key = 'test_key';
$value = apcu_fetch($key);
if ($value === false) {
$value = 'Hello, APCu!';
apcu_store($key, $value, 10); // 缓存10秒
}
echo $value;
访问该脚本,若输出`Hello, APCu!'则表示配置成功。
Redis和Memcached是高性能的分布式内存缓存系统,适合缓存数据库查询、会话数据等,支持多服务器共享。
Redis:
sudo apt update
sudo apt install redis-server php-redis
Memcached:
sudo apt update
sudo apt install memcached php-memcached
编辑PHP配置文件:
[redis]
extension=redis.so # 启用Redis扩展
; 若需配置Redis服务器地址(默认localhost)
; redis.default.host=localhost
; redis.default.port=6379
; redis.default.password=your_password
sudo systemctl restart php8.1-fpm
sudo systemctl restart redis-server # Redis服务
# 若使用Web服务器,需重启Apache/Nginx
创建测试脚本redis_test.php:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379); // 连接Redis服务器
$key = 'cache_key';
$value = $redis->get($key);
if ($value === false) {
$value = 'Cached data from Redis';
$redis->set($key, $value, 60); // 缓存60秒
}
echo $value;
访问脚本,若输出Cached data from Redis则表示配置成功。
opcache.memory_consumption、apcu.shm_size)。requirepass配置)。