本文目录导读:

在PHP中配置APCu缓存主要涉及安装扩展、修改php.ini配置以及代码使用三个方面,我来详细说明:
安装APCu扩展
Ubuntu/Debian系统
# 安装APCu扩展 sudo apt-get install php-apcu # 或者使用PECL安装 pecl install apcu
CentOS/RHEL系统
sudo yum install php-pecl-apcu
Windows系统
在php.ini中添加:
extension=php_apcu.dll
php.ini基础配置
; 启用APCu扩展 extension=apcu.so ; APCu基础配置 ; 共享内存大小(MB) apc.shm_size=64M ; 启用APCu apc.enabled=1 ; 启用CLI模式下的APCu apc.enable_cli=1 ; 缓存条目数量 apc.num_files_hint=10000 ; 用户缓存条目数量 apc.user_entries_hint=10000 ; 缓存过期时间(秒) apc.ttl=7200 ; 用户缓存过期时间(秒) apc.user_ttl=7200 ; 缓存垃圾回收时间(秒) apc.gc_ttl=3600
高级配置选项
; 内存分配配置 ; 对缓存文件加锁 apc.lazy_funcs=1 apc.lazy_classes=1 ; 文件更新检测频率 ; 0为每次请求都检查 apc.stat=1 ; 写锁(避免并发写入问题) apc.write_lock=1 ; 内存碎片的处理 apc.slam_defense=0 ; 触发垃圾回收的条件 apc.gc_ttl=3600 ; 序列化器选择(php/igbinary) apc.serializer=php
配置验证
检查是否安装成功
<?php // 查看APCu配置信息 phpinfo(); // 或者使用命令行 php -m | grep apcu
查看配置详情
<?php print_r(apcu_sma_info()); // 查看内存使用情况 print_r(apcu_cache_info()); // 查看缓存信息
实际使用示例
<?php
// 存储数据到缓存
apcu_store('username', '张三', 3600);
// 从缓存获取数据
$username = apcu_get('username');
if ($username === false) {
echo "缓存未命中";
} else {
echo "缓存命中: " . $username;
}
// 检查key是否存在
if (apcu_exists('username')) {
echo "缓存key存在";
}
// 删除缓存
apcu_delete('username');
// 清空所有缓存
apcu_clear_cache();
最佳实践配置
; 生产环境推荐配置 apc.enabled=1 apc.shm_size=128M apc.ttl=7200 apc.user_ttl=7200 apc.gc_ttl=3600 apc.write_lock=1 ; 确保APCu有自己的内存区域 ; 避免与其它共享内存冲突
通过Docker配置(如果使用容器)
# Dockerfile示例
FROM php:7.4-fpm
RUN pecl install apcu \
&& docker-php-ext-enable apcu
# 复制自定义配置
COPY apcu.ini /usr/local/etc/php/conf.d/
; apcu.ini extension=apcu.so apc.enabled=1 apc.shm_size=64M
优化建议
- 内存大小调整:根据应用需求调整
apc.shm_size - CLI模式:调试时启用
apc.enable_cli=1,生产环境建议关闭 - 序列化格式:如果安装了igbinary,可以使用
apc.serializer=igbinary提升性能 - 监控配置:定期检查缓存命中率和内存使用情况
监控脚本示例
<?php // 简单的监控脚本 $info = apcu_cache_info(); $sma = apcu_sma_info(); echo "缓存命中率: " . round($info['num_hits'] / ($info['num_hits'] + $info['num_misses']) * 100, 2) . "%\n"; echo "内存使用: " . round(($sma['num_seg'] * $sma['seg_size'] - $sma['avail_mem']) / 1048576, 2) . "MB\n";
记得在修改配置后重启PHP-FPM或Apache服务使配置生效。