yii2.0.14切换缓存为memcached需三步:确认php已启用memcached扩展(非memcache)、配置components中cache为yii\caching\memcache类并指定servers、通过set/get验证读写;注意无keyprefix自动支持、单值≤1mb、不支持依赖机制。

Yii2.0.14 切换缓存组件为 Memcached,核心是替换配置、确认扩展、验证行为三步到位。它不涉及框架升级或代码重写,重点在组件注册与运行环境匹配。
确认 PHP 环境已启用 memcached 扩展
Yii2 要求使用 memcached(不是 memcache)扩展,且版本需兼容 PHP 7.x(2.0.14 常用于 PHP 7.0–7.4)。执行以下命令验证:
-
php -m | grep memcached—— 应输出memcached -
php --ri memcached—— 查看版本及支持的协议(如 igbinary、json) - 若无输出,需安装:Ubuntu 用
sudo apt-get install php-memcached;CentOS 用sudo yum install php-pecl-memcached
修改配置文件启用 Memcached 组件
在 config/web.php 或 common/config/main.php 的 'components' 数组中,替换原有 'cache' 配置:
'cache' => [
'class' => 'yii\caching\MemCache',
'servers' => [
[
'host' => '127.0.0.1',
'port' => 11211,
'weight' => 100,
],
],
],
- 务必用
yii\caching\MemCache类名,不是Memcache或Memcached -
servers是数组,即使单节点也要写成一维数组形式 - 可加
'useMemcached' => true(非必需,但显式声明更清晰) - 避免混用
memcache扩展——它不支持set($key, $value, $expire)中的过期时间参数,会导致静默失败
验证缓存读写是否生效
在任意控制器或调试脚本中运行测试代码:
$cache = Yii::$app->cache;
$key = 'test_memcached_' . time();
$cache->set($key, ['hello' => 'world'], 30); // 存 30 秒
$data = $cache->get($key);
var_dump($data); // 应输出 array('hello' => 'world')
- 若返回
false,检查 Memcached 服务是否运行:systemctl status memcached或netstat -tlnp | grep :11211 - 若返回空或报错,查看 PHP 错误日志,常见原因是扩展未加载或连接超时
- 可配合
$cache->delete($key)和$cache->flush()辅助调试
注意事项与常见坑点
切换后需留意几个关键细节:
- Memcached 不支持键前缀(
keyPrefix)自动拼接,如需多应用隔离,必须手动在 key 中加入标识,例如'myapp_user_123' - 缓存值大小受限于 Memcached 单条最大 1MB(默认),大对象需分片或改用 Redis
- 不支持依赖(
TagDependency、FileDependency)等高级功能,仅基础 TTL 过期机制 - 集群部署时,Yii2 通过一致性哈希分发 key,无需额外配置,但所有节点必须网络互通且端口开放











