Yii2 memcached无法使用但原生PHP连接正常,是什么原因导致的?
Yii2 Memcached 无法正常工作的常见原因
- 扩展对应类配置错误:Yii2 提供两个Memcached相关缓存类,
yii\caching\MemCache默认适配PHPmemcache扩展,yii\caching\MemCached适配PHPmemcached扩展,若配置类与你服务器安装的扩展不匹配,会出现连接失效。 useMemcached参数未开启:如果你使用的是yii\caching\MemCache类,需要显式配置'useMemcached' => true,才会调用memcached扩展,默认值为false,会自动使用memcache扩展,和原生测试用的扩展不一致就会失效。- 缓存键前缀配置问题:Yii2缓存组件默认会自动添加
keyPrefix前缀(默认值为当前应用ID),你原生PHP操作时没有加此前缀,会出现Yii写入的内容原生读不到、原生写入的内容Yii读不到的情况,看起来就是缓存不生效。 - servers配置结构错误:Yii2的Memcached服务端配置要求
servers数组每个元素为关联数组结构:['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1],如果写错键名、或者结构不符合要求,会导致服务端配置加载失败。 - 组件被覆盖:如果你的应用在模块、或者其他配置文件中重复定义了
cache组件,会覆盖你在config/web.php中写的Memcached配置,实际调用的是其他缓存组件(比如默认的文件缓存),导致操作不生效。 - 序列化规则不匹配:Yii2缓存组件默认会对存储内容自动序列化,如果你原生测试写入内容时没有做序列化处理,用Yii读取时会因为反序列化失败返回
false,看起来就是缓存没有命中。
内容的提问来源于stack exchange,提问作者life quality
相关产品推荐
相关产品推荐

