2010-05-17 5 views
5

Verwenden Sie die neuere PHP pecl/memcached Erweiterung. Aufrufe von Memcached :: setOption() mögen;PHP pecl/memcached Erweiterung langsam beim Setzen der Option für konsistente Hashing

$m = new Memcached(); 
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT); 

zwischen 150 bis 500 ms kostet - nur bei der Herstellung der Aufruf setOption() und als wir nicht persistente Verbindungen verwendet, sondern diese bei jeder Anfrage zu tun, es tut weh.

Delivering tiefer, Einstellung Memcached :: OPT_DISTRIBUTION zu Memcached :: DISTRIBUTION_CONSISTENT endet Aufruf von update_continuum() in libmemcached, die ziemlich intensiv scheint, obwohl wir nur eine Liste von 15 memcached Servern übergeben, so etwas überraschend zu Es dauert zwischen 150 und 500 ms, um die Kontinuumdatenstruktur wieder aufzubauen.

Konnte es sein, diese Einstellung ist nur für persistente Verbindungen geeignet, wo es nur einmal während der ersten Verbindung aufgerufen wird? Oder ist das ein Bug libmemcached?

Mit der neueren pecl/Memcached Erweiterung 1.0.1 mit libmemcached 0,38

Dank.

+0

Am besten ist es, dieses Problem zu berichten direkt an Andrei: https://github.com/andreiz/php-memcached – Till

Antwort

2

libmemcached 0.38 ist an diesem Punkt ziemlich alt. So ist pecl/memcached 1.0.1. Könnten Sie pecl/memcached 2.0.0b1 release von github ausprobieren?

0

Gleiches Problem mit pecl/memcached 2.2.0 (späteste von PECL wie vom Schreiben). Die einzige Lösung war für mich von DISTRIBUTION_CONSISTENT zu wechseln:

$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true); 
$memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true); 

Es scheint gut zu funktionieren:

var_dump($memcached->getServerByKey($key)['host']); 
// string '192.168.56.1' (length=12) <== dead host 

$memcached->set($key, $result, 3600); 

var_dump($memcached->getServerByKey($key)['host']); 
// string '127.0.0.1' (length=9) <== working host 

var_dump($memcached->getLastErrorMessage()); 
// string 'SUCCESS' (length=7)