使用带有memcache的yii,当两个服务器中的一个失败时出错

时间:2013-10-10 14:55:47

标签: php yii memcached

我遇到yii问题并在memcache中存储数据。对于我的应用程序,我使用system.caching.CMemCache和以下配置:

'servers' => array(
    'server1' => array('host' => 'localhost', 'port' => 11211, 'weight' => 50),
    'server2' => array('host' => '192.168.0.2', 'port' => 11211, 'weight' => 50)
),

如果两个系统上的memcache都在运行,那么一切正常,价值会在服务器上传播开来。但如果一台服务器出现故障(或者我手动停止了内存缓存),应用程序会抛出错误,如

MemcachePool::get(): Server 192.168.0.2 (tcp 11211, udp 0) failed with: Connection refused (111)

这不是很好,我想如果一个服务器失败,yii会选择另一个服务器进行读写,或者至少产生一些缓存未命中并且不抛出一个异常:(

这是正常的还是有一些配置问题?

2 个答案:

答案 0 :(得分:2)

我认为,正如您所使用的memcache扩展程序

,您看到here所述的消息是正常的

并阅读此SO

php的扩展名有两个版本memcache,而另一个版本是memcached。您可以在ubuntu框中安装它们,如:

 sudo apt-get install php5-memcache
  and 
 sudo apt-get install php5-memcached 

Memecached扩展程序处理failover情况,因为我从上面的链接中读取并通过测试yii中的以下设置进行确认

'cache'=>array(
            'class'=>'CMemCache',
            'useMemcached'=>true,
            'servers'=>array(
                array(
                    'host'=>'localhost',
                    'port'=>11211,
                    'weight'=>60,
                ),
                array(
                    'host'=>'192.168.33.31',
                    'port'=>11211,
                    'weight'=>30,
                ),
            ),
        ),

如上所述为php安装memcached扩展,并将'useMemcached'=>true,设置添加到缓存配置。当我在我的localhost上测试时,它处理故障转移情况,但页面响应时间显着下降。 / p>

希望这会有所帮助。

答案 1 :(得分:0)

这个变量是真的吗?

http://www.php.net/manual/en/memcache.ini.php#ini.memcache.allow-failover

否则此链接也很有用:

Memcache : Confusions

(可能这只是一个通知。)