Como o memcache com o MySQL funciona?

Estou tentando entender (e provavelmente implantar) o memcached no nosso env.

Temos 4 servidores web no loadbalancer executando uma grande aplicação web desenvolvida em PHP. Já estamos usando a APC. Quero ver como o memcached funciona? Pelo menos, pode ser, eu não entendo como o cache funciona.

Temos algumas consultas dinâmicas complexas que combinam várias tabelas para extrair dados. Cada vez, os dados serão de diferentes bancos de dados de clientes e os dados continuam mudando. Do meu entendimento, se alguns dados estiverem armazenados no cache e se a solicitação for próxima da próxima vez, os mesmos dados serão retornados. (Ou eu posso estar completamente errado aqui).

Como esse memcache completo (ou, para esse assunto, qualquer material de cache funciona)?

O cache, em geral, é um mecanismo de armazenamento de chave / valor muito rápido onde você pode armazenar valores (geralmente serializados) por uma chave predeterminada, para que você possa recuperar os valores armazenados pela mesma chave.

Em relação ao MySQL, você escrevesse o código do seu aplicativo de tal maneira, que você verificaria a presença de dados no cache, antes de enviar uma solicitação ao database. Se uma correspondência foi encontrada (a chave correspondente existe), você teria access aos dados associados à chave. O objective é não emitir um pedido para o database mais caro se puder ser evitado.

Um exemplo (somente demonstrativo):

$cache = new Memcached(); $cache->addServer('servername', 11211); $myCacheKey = 'my_cache_key'; $row = $cache->get($myCacheKey); if (!$row) { // Issue painful query to mysql $sql = "SELECT * FROM table WHERE id = :id"; $dbo->prepare($sql); $stmt->bindValue(':id', $someId, PDO::PARAM_INT); $row = $stmt->fetch(PDO::FETCH_OBJ); $cache->set($myCacheKey, serialize($row)); } // Now I have access to $row, where I can do what I need to // And for subsequent calls, the data will be pulled from cache and skip // the query altogether var_dump(unserialize($row)); 

Confira PHP docs no memcached para obter mais informações, existem alguns bons exemplos e comentários.

Existem vários exemplos de como o memcache funciona. Aqui está um dos links.

Em segundo lugar, o Memcache pode funcionar com ou sem o MySQL.

Ele armazena em cache seus objects que estão no PHP, agora, se ele vem do MySQL, ou em qualquer outro lugar, se é um Objeto PHP, ele pode ser armazenado no MemCache.

A APC oferece mais funcionalidades que a Memcache. Além de armazenar / armazenar em cache objects PHP, ele também armazena em cache o PHP-executável-máquina-legível-opcodes para que seus arquivos PHP não passem pelos processos de carregamento na memory-> Ser Comiled, em vez disso, ele corre diretamente o opcode já compilado da memory.

Se seus dados continuam mudando (entre pedidos), o cache é inútil, porque esses dados serão obsoletos. Mas na maioria das vezes (eu aposto mesmo em seu cache), várias solicitações de database resultam no mesmo dataset, caso em que um cache (na memory) é muito útil.

PS: Fiz uma rápida pesquisa no google e encontrei este vídeo sobre o memcached, que tem uma boa qualidade => http://www.bestechvideos.com/2009/03/21/railslab-scaling-rails-episode-8-memcached . O único problema pode ser que fala sobre Ruby On Rails (que também não uso tanto, mas é muito fácil de entender). Espero que ele ajude você a entender melhor o conceito.