2010-05-17 9 views
5

Uso dell'estensione PHP pecl/memcached più recente. Chiamate a Memcached :: setOption() mi piace;Estensione PHP pecl/memcached lenta quando si imposta l'opzione per l'hashing coerente

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

costano tra 150 e 500 ms - solo nel fare la chiamata a setOption() e come noi non stiamo usando le connessioni persistenti, ma piuttosto fare questo su ogni richiesta, fa male.

Scavando in profondità, impostando Memcached :: OPT_DISTRIBUTION su Memcached :: DISTRIBUTION_CONSISTENT termina chiamando update_continuum() in libmemcached che sembra essere abbastanza intenso, anche se stiamo passando solo una lista di 15 server memcached in, quindi un po 'sorprendente per vederlo richiedere tra 150 a 500 ms per ricostruire la struttura di dati continuo.

Potrebbe essere l'impostazione di questa opzione è adatto solo per le connessioni persistenti, dove è chiamato solo una volta mentre si effettua la connessione iniziale? O si tratta di un bug libmemcached?

Utilizzando la più recente PECL/estensione memcached 1.0.1 con libmemcached 0.38

Grazie.

+0

E 'meglio per segnalare il problema direttamente a Andrei: https://github.com/andreiz/php-memcached – Till

risposta

2

libmemcached 0.38 è abbastanza vecchio a questo punto. Così è pecl/memcached 1.0.1. Potresti provare la versione 2.0.0b1 di pecl/memcached da github?

0

Stesso problema con pecl/memcached 2.2.0 (più recente da PECL al momento della scrittura). L'unica soluzione per me è stato quello di passare da DISTRIBUTION_CONSISTENT a:

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

Sembra funzionare bene:

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) 
Problemi correlati