qiuxis 2016-10-29 00:29:49 13217次浏览 3条回复 1 0 0

php 的memcache 扩展有 memcache 和 memcached 两个 这里就不详细介绍这两个扩展的具体区别了,网上介绍很多

本人安装的是 memcached 详细安装步骤已经贴在本站:系列之三:php7.0下 安装 memcached 和 php扩展memcached

不过在使用过程中还是出现了一点点问题 其实yii2是支持两个扩展的,但是yii2还无法很智能的区别你用的是 memcache 或者 memcached 当时在SiteController.php 文件下做测试

先不适用YII2 的组件试一试

...
         $mc = new \Memcached();
         $mc->addServer("localhost", 11211);
        //$mc->set("foo", "Hello!");
         $val = $mc->get('foo');
         var_dump($val);
...

能正常打印出结果

再用yii2 的组件

$cache = Yii::$app->getCache() ;
$cache->add('name','zhangsan');

出现这个结果:
Invalid Configuration – yii\base\InvalidConfigException
MemCache requires PHP memcache extension to be loaded.

已经安装了memcached 扩展为何还提示没安装,这个真搞不明白? 之后再回过头去看源码:MemCache.php

...
 * MemCache supports both [memcache](http://pecl.php.net/package/memcache) and
 * [memcached](http://pecl.php.net/package/memcached). By setting [[useMemcached]] to be true or false,
 * one can let MemCache to use either memcached or memcache, respectively.
...

说明需要配置属性 [[useMemcached]] true:memcached , false:memcache

所以我没配置这个属性,useMemcached 为 false,所以Yii2 以为我使用的是 memcache

问题解决:

main-local.php 
...
        'cache' => [
            'class' => 'yii\caching\MemCache',
            'servers' => [
                [
                    'host' => 'localhost',
                    'port' => 11211,
                    'weight' => 100,
                ],
                [
                    'host' => 'localhost',
                    'port' => 11211,
                    'weight' => 50,
                ],
            ],
            'useMemcached' => true ,
        ],
...

在此刷新site页面,没有错误提示了。 终端:

[root modules]# telnet 127.0.0.1 11211

get name
VALUE name 0 31
a:2:{i:0;s:8:"zhangsan";i:1;N;}
END

一切正常,yii2 可以使用memcached

您需要登录后才可以回复。登录 | 立即注册