将 Yii 与 memcache 一起使用,当两台服务器之一发生故障时出错


using yii with memcache, error when one of two server fails

我对 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 都在运行,则一切正常,值将分散在服务器上。 但是,如果一台服务器出现故障(或者如果我手动停止 memcache(,应用程序会抛出错误,例如

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

这不是很好,我想如果一台服务器出现故障,Yii 会选择另一台服务器进行读写,或者至少产生一些缓存未命中,并且不会抛出一个 exeption :(

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

我认为您看到此处讨论的这些消息是正常的,因为您使用的是扩展memcache

并阅读此内容。

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,设置添加到缓存配置中。当我在本地主机上进行测试时,它会处理故障转移情况,但页面响应时间显着下降。

希望这会有所帮助。

这个变量是真的吗?

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

否则,此链接也很有用:

记忆缓存:困惑

(可能这只是一个通知。