Laravel 7.4在共享主机中切换CACHE_DRIVER为memcached后不生效问题
问题排查与解决步骤
- 第一步:验证Memcached基础连接可用性
共享主机通常会限制端口访问,即使phpinfo显示扩展已安装,也不代表程序可以正常连接Memcached服务。先在项目根目录新建临时测试文件mem_test.php,写入以下代码:
命令行执行<?php $mem = new Memcached(); // 此处替换为你phpinfo中显示的Memcached实际主机和端口 $mem->addServer('127.0.0.1', 11211); $testWrite = $mem->set('test_connection', 'success', 60); $testRead = $mem->get('test_connection'); echo "写入结果:" . var_export($testWrite, true) . "<br>"; echo "读取结果:" . var_export($testRead, true) . "<br>"; echo "连接报错信息:" . $mem->getResultMessage();php mem_test.php或者浏览器访问该文件地址,确认是否能正常读写。如果返回连接错误,直接联系主机服务商确认Memcached服务的连接参数(主机地址、端口、是否需要SASL认证)。 - 第二步:补全必要的认证参数
绝大多数共享主机的Memcached服务为了多用户隔离,会强制开启SASL认证,你之前认为非必填的sasl相关参数实际是必填项。请到主机商的控制面板找到Memcached对应的账号密码,添加到.env文件中:MEMCACHED_USERNAME=你的主机提供的Memcached账号 MEMCACHED_PASSWORD=你的主机提供的Memcached密码 # 部分主机要求配置持久化ID,可随意填写一个唯一字符串即可 MEMCACHED_PERSISTENT_ID=my_laravel_app_mem - 第三步:验证Laravel Memcached驱动本身是否正常工作
切换缓存驱动后,原file驱动下存储的缓存不会自动同步到Memcached,你测试cache()->has('countries')返回false不一定是驱动失效,可能是Memcached里还没有生成该缓存。执行以下测试代码验证驱动:
如果能正常输出<?php // 写入测试 cache()->put('mem_demo', 'memcached_worked', 300); // 读取测试 echo cache()->get('mem_demo'); // 也可以指定存储驱动调用,排除默认驱动配置错误问题 echo \Cache::store('memcached')->get('mem_demo');memcached_worked,说明驱动配置已经生效,重新生成你的countries等业务缓存即可正常使用。 - 第四步:排查缓存前缀和配置缓存问题
- 检查
config/cache.php中的prefix配置,确认.env中没有配置错误的CACHE_PREFIX参数,避免缓存键名不匹配 - 如果你之前执行过
php artisan config:cache生成了配置缓存,修改.env后必须重新执行php artisan config:cache才能生效,或者直接删除bootstrap/cache/config.php文件让Laravel实时读取配置
- 检查
内容的提问来源于stack exchange,提问作者McRui
相关产品推荐
相关产品推荐

