apcu 是 php 的本地变量缓存扩展,适用于单机环境中的只读高频数据(如配置、权限规则),在 yii2 中通过 yii\caching\apccache 配置使用,不可替代 redis/memcached 做分布式缓存。

APCu 是 PHP 的用户变量字节码缓存扩展,适合在单机、无共享环境(如 CLI 或单 Web 服务器)中缓存 PHP 变量数据。在 Yii2 中,它不能替代 Redis/Memcached 做数据缓存,但可作为轻量级、低开销的本地缓存后端,尤其适用于只读、高频访问、低变更率的数据(如配置项、权限规则、静态枚举映射等)。
配置 APCu 缓存组件(Yii2.0.45 兼容)
确保已安装并启用 apcu 扩展(PHP ≥ 7.0 推荐用 apcu,非 apc):
# Ubuntu/Debian(示例) sudo apt install php-apcu sudo systemctl reload php*-fpm
验证是否启用:
<?php var_dump(extension_loaded('apcu')); ?>
然后在 config/web.php(或 config/main.php)的 'components' 中添加:
'cache' => [
'class' => 'yii\caching\ApcCache',
// 可选:设置前缀避免多应用冲突
'keyPrefix' => 'myapp_v2_',
],
✅ 注意:Yii2.0.45 原生支持
yii\caching\ApcCache类,无需额外安装扩展包。
❌ 不要使用yii\caching\ApcuCache(那是 Yii3 的类,Yii2 不识别)。
APCu 适用场景与避坑建议
-
适合缓存
- 全局配置数组(如
Yii::$app->params的衍生结构) - RBAC 权限规则(
AuthManager::getPermissionsByRole()结果) - 静态字典表(地区、状态码、单位列表等)
- 视图片段中不随用户变化的内容(如导航菜单、页脚信息)
- 全局配置数组(如
-
不适合缓存
- 用户会话相关数据(APCu 进程间不共享,FPM 多 worker 下不可靠)
- 需跨服务器同步的数据(APCu 是本地内存,无集群能力)
- 高频写入+读取的数据(APCu 写操作有锁,高并发下性能不如 Redis)
-
关键配置提醒
- 确保
apc.enabled = 1和apc.shm_size足够(如64M) - 生产环境建议关闭
apc.stat = 0(禁用文件时间戳检查),但需配合部署时清空 APCu(apcu_clear_cache()) - 若同时开启 OpCache,请注意二者分工:OpCache 缓存 PHP 脚本字节码,APCu 缓存运行时变量——不冲突,可共存
- 确保
验证是否生效
在任意控制器中加一段调试代码:
$cache = Yii::$app->cache; $key = 'test_apcu_' . time(); $cache->set($key, ['hello' => 'world'], 30); var_dump($cache->get($key)); // 应输出数组
刷新页面多次,确认能稳定读出;再等待 30 秒后读取应返回 false。
替代方案对比(供选型参考)
| 缓存类型 | 进程共享 | 跨服务器 | 安装复杂度 | 推荐用途 |
|---|---|---|---|---|
ApcCache |
否(worker 级) | ❌ | 极低(仅扩展) | 本地只读小数据、开发/单机环境 |
FileCache |
否(文件锁瓶颈) | ✅ | 无 | 仅开发调试,生产慎用 |
RedisCache |
✅ | ✅(单点/集群) | 中(需部署 Redis) | 主力数据缓存、Session、锁 |
DbCache |
✅ | ✅ | 中(需建表+索引) | 退化兜底方案(务必加 cache_key 索引) |
不复杂但容易忽略:APCu 是“快而窄”的工具,用对地方才真正提效。











