using yii with memcache, error when one of two ser

2019-07-22 02:02发布

问题:

i have a problem with yii and storing data in memcache. For my application i use system.caching.CMemCache and the following config:

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

if memcache on both systems is running, everything is ok and the values get spread up on the servers. but if one server fails (or if i stop the memcache manually) the application throw errors like

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

this isn't really nice, i thought if one server failed yii would choose another server for reading and writing or at least produce some cache misses and do not throw an exeption :(

is this normal or are there some configuration issues?

回答1:

I think its normal you are seeing those messages as discussed here, given you are using memcache extension

And also read this SO.

There are two version of extension for php one is memcache while the other is memcached. You can install each of them on ubuntu box like :

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

Memecached extension handles failover situations ,as I read from the above links and confirm by testing following settings in 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,
                ),
            ),
        ),

Install the memcached extension for php as described above and add 'useMemcached'=>true, setting to cache configs.As I test on my localhost, it handles the failover situation, but the page response time drops significantly.

Hope this will be helpful.



回答2:

Is this variable true?

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

Otherwise this link can also be useful:

Memcache : Confusions

(Probably this is only a notice.)