2

我在使用 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 会选择另一台服务器进行读写,或者至少会产生一些缓存未命中并且不会抛出异常:(

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

4

2 回答 2

2

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

并阅读此SO

php 的扩展有两个版本,一个memcachememcached. 您可以将它们中的每一个安装在 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,
                ),
            ),
        ),

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

希望这会有所帮助。

于 2013-10-10T19:04:46.657 回答
0

这个变量是真的吗?

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

否则,此链接也很有用:

内存缓存:混乱

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

于 2013-10-10T15:09:01.343 回答