Memcached
Eventualmente nos deparamos com alguma aplicação web, ou até mesmo site, que tenha seu conetúdo armazenado em uma base de dados, seja ela um banco de dados ou um xml ou até mesmo JSON. isso é muito interessante no ponto de vista de dinamismo, pois você pode ter um sistema de administração, atualizar de maneira mais rápida, porém isso pode acarretar um grande problema se sua aplicação(site) tiver muito acesso. Isso pode criar um gargalo enorme na transferência dos dados e até mais travar seu servidor, uma vez que cada requisição de página é uma reuisição para o arquivo ou uma requisição para o banco de dados.
Para se evitar esse tipo de gargalo, é interessante utilizar algum mecanismo de cache para os dados. Um dos mais utilizados e mais fáceis de se usar (pelo menos em PHP) é o memcached.
O ruim desse mecanismo é que o servidor tem que disponibilizá-lo, não é uma coisa que você memo possa fazer em sua aplicação. Tirando isso, é muito bom.
Basicamente, você armazena os dados na memória do servidor o que porna a leitura muito mais rápida.
O memcached, permite que você armazene qualquer tipo de texto desde que em um array, ex. você não pode armazenar somente uma string, tem que armazenar um array que tenha essa string.
adicionar = “string”; X errado
adicionar = $array[0] = “string”; Correto
No memcached você armazena em um local (chave) que você define, o conteúdo e por quanto tempo você quer que o conteúdo seja armazenado.
Como um banco de dados, você deve informar ao memcached o endereço de armazenamento, por padrão é localhost:11211, mas pode variar caso o rsponsável pelo servidor determine.
bom vamos a um exemplo
$mem = new Memcache;
$mem->addServer("localhost:11211");
$mem->set("chave01", $array, TRUE, 60);
No exemplo acima, eu estou armazenando na chave01 meu array por 60 segundos.
Agora para pegar esse conteúdo, você deve usar a função get. Vamos ao exemplo.
$mem = new Memcache;
$mem->addServer("localhost:11211");
$resp = $mem->get("chave01");
print_r($resp);
Nesse exemplo eu estou pegando o conteúdo da chave01 e armazenando na variável $resp.
Aqui abaixo, um exemplo de uma função que procura no memcached uma determinada query e se não acha busca no banco de dados, armazena no memcached e responde o conteúdo.
function mysql_queryCache($consulta, $tempo = 3600) {
$chave = md5($consulta); //Gera uma chave à partir de um hash formado pela query
// Conecta no Memcached
$mem = new Memcache;
$mem->addServer("localhost:11211")
// Tenta pegar o item em cache
$query = $mem->get($chave);
if ($query === false) {
$query = mysql_query($consulta);
if(mysql_num_rows($query) > 0){
$itens_array = array();
if(mysql_num_rows($query)){
while($item = mysql_fetch_array($query)){
$itens_array[] = $item;
}
}
}else{
$itens_array[0] = "null";
$itens_array[1] = "null";
}
$mem->set($chave, $itens_array, TRUE, $tempo);
} else {
$itens_array = $query;
}
return $itens_array;
}
print_r(mysql_queryCache("SELECT * FROM clientes", 60) );
essa função procura no memcached a query ‘SELECT * FROM clientes’, se não tiver faz a busca no banco de dados, armazena no memcached e retorna o conteúdo. Se a query retornar vazia, responde null.
Basicamente é isso, espero que seja tão útil para voc~es como foi para mim.
Enviado por: leandro garcia - Categoria(s): cache, PHP Tags relacionadas: cahe, memcache, memcached, PHP