thinkphp项目启用memcached缓存驱动需三步:1. 确认php memcached扩展已加载且memcached服务运行并连通;2. 在.env中设置cache_driver=memcached及memcached_host/port,优先级高于config;3. 补全config/cache.php中stores.memcached配置,含binary协议选项,并清除runtime/cache验证。

要在ThinkPHP项目中让Memcached缓存驱动真正跑起来,必须绕过默认的file驱动陷阱,确保PHP扩展、服务端、配置三者全部对齐——漏掉任意一环,Cache::get()都会静默返回null。
确认Memcached服务与PHP扩展已就位
先在终端执行 php -m | grep memcached,看到输出 memcached 才算扩展加载成功;若无输出,需安装扩展:sudo apt-get install php-memcached(Ubuntu/Debian)或 sudo yum install php-pecl-memcached(CentOS/RHEL),然后重启Web服务。
再用 systemctl is-active memcached 检查服务是否运行中,非 active 状态则执行 sudo systemctl start memcached 启动。
【关键验证】 运行 php -r "$m = new Memcached(); $m->addServer('127.0.0.1', 11211); var_dump($m->getVersion());",有版本号输出才算连通。若报错“Failed to connect”,说明服务未监听本机11211端口或防火墙拦截。
修改 .env 文件启用 Memcached 驱动
打开项目根目录下的 .env 文件,在其中添加或修改这一行:
CACHE_DRIVER=memcached
这一步不可跳过,【.env 的优先级高于 config/cache.php】,只改 config 文件却没动 .env,重启后依然走 file 驱动。
如果项目使用的是 ThinkPHP 6.x,还需确保 .env 中存在以下连接参数(TP6 默认不自动读取系统级 Memcached 配置):
MEMCACHED_HOST=127.0.0.1MEMCACHED_PORT=11211
补全 config/cache.php 中的 stores.memcached 配置
打开 config/cache.php,找到 'stores' 数组,在其中加入完整配置块:
'memcached' => [ 'driver' => 'memcached', 'servers' => [ ['host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => (int)env('MEMCACHED_PORT', 11211), 'weight' => 100], ], 'options' => [\Memcached::OPT_BINARY_PROTOCOL => true],],
注意:必须显式设置 'options' => [\Memcached::OPT_BINARY_PROTOCOL => true],否则默认文本协议会导致性能骤降,批量读 getMultiple 几乎无效。
同时检查 'default' => env('cache.driver', 'memcached') 是否指向 memcached,大小写敏感,写成 Memcached 或 MEMCACHED 都会失败。
清除旧缓存并验证驱动生效
第一步:删除 runtime/cache/ 目录下所有文件,避免旧 file 驱动缓存残留干扰判断。
第二步:在命令行执行两段测试:
① 写入缓存:php -r "cache('test_key', 'test_value', 30);"
② 读取缓存:php -r "var_dump(cache('test_key'));"
如果第二步输出 string(12) "test_value",说明 Memcached 驱动已成功接管;若输出 NULL,请回头检查 .env 中 CACHE_DRIVER 值、config/cache.php 中 default 是否匹配、stores.memcached.servers 是否可连通。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











