Laravel 5.5使用Memcached作为缓存驱动的问题求助
解决Laravel 5.5配置Memcached缓存驱动的常见问题
我太懂你折腾一整天找不到解决方案的烦躁了——本来想好用Redis,结果发现Laravel 5.5里它没法同时当广播和缓存驱动,转投Memcached还卡壳,这事儿确实闹心。咱们一步步来排查,先把测试项目跑通,再迁移到你的现有应用。
1. 先把基础依赖搞定:Memcached服务+PHP扩展
这是90%配置失败的根源,别跳过:
- 检查Memcached服务是否在跑:
Linux上直接敲systemctl status memcached,看输出里有没有active (running);Windows的话去服务列表里找Memcached。没启动的话,Linux用systemctl start memcached开起来,再加个systemctl enable memcached设成开机自启。 - 安装PHP的Memcached扩展(划重点:是带d的那个!):
别搞混memcache和memcached,Laravel认的是后者:- Ubuntu/Debian:
sudo apt-get install php-memcached - CentOS/RHEL:
sudo yum install php-pecl-memcached - Windows:去PECL找对应你PHP版本的dll文件,丢到ext目录,然后在php.ini里加一行
extension=php_memcached.dll
装完重启Web服务器(Apache/Nginx)和PHP-FPM,再敲php -m看看输出里有没有memcached,有就说明成了。
- Ubuntu/Debian:
2. 配置Laravel的缓存驱动
接下来改项目配置:
- 修改
.env文件:
找到缓存相关的行,改成这样:
默认Memcached没开认证,所以用户名密码留空就行,要是你自己设了再填。CACHE_DRIVER=memcached MEMCACHED_HOST=127.0.0.1 MEMCACHED_PORT=11211 MEMCACHED_USERNAME= MEMCACHED_PASSWORD= - 核对
config/cache.php的配置:
打开这个文件,确认memcached块是下面这样的(Laravel 5.5默认应该差不多,但还是核对下):
不用额外引入'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'options' => [ Memcached::OPT_COMPRESSION => true, Memcached::OPT_BINARY_PROTOCOL => true, ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => 100, ], ], ],Memcached类,Laravel已经帮你处理好了。
3. 快速测试缓存是否正常工作
配置完别急着迁移,先在测试项目里验证:
- 打开Laravel的tinker工具:
php artisan tinker - 存个缓存:
Cache::put('test_memcached_key', 'it works!', 60); - 取缓存:
Cache::get('test_memcached_key');
如果返回it works!,说明没问题;要是报错:- 提示
Class 'Memcached' not found:回到第一步,PHP扩展肯定没装对。 - 提示连接失败:检查Memcached是不是在127.0.0.1:11211上跑,防火墙有没有放行11211端口。
- 提示
4. 迁移到现有项目的注意事项
测试通过后,给现有应用迁移时要注意:
- 先备份现有项目的
.env和config/cache.php,别把旧配置搞丢了。 - 检查现有服务器上的Memcached服务和PHP扩展,毕竟测试环境和生产环境可能不一样。
- 切换驱动后,执行
php artisan cache:clear清理旧缓存,避免旧缓存和新缓存冲突。
内容的提问来源于stack exchange,提问作者Tony Langworthy
相关产品推荐
相关产品推荐

