DEV Community

Danilo Machado
Danilo Machado

Posted on • Edited on

4 1

Melhorando a perfomace de projetos PHP com Memcached

O módulo Memcached fornece uma interface processual e orientada a objetos útil para o daemon de armazenamento em cache do memcached altamente eficaz, que foi especialmente projetado para diminuir a carga do banco de dados em aplicativos da Web dinâmicos.

O módulo Memcached também fornece um manipulador de sessão (memcache).

Dicas de onde usar Memcached na sua aplicação?

  1. Dashboards
  2. Listagens
  3. Consultas

O principal ponto do Memcached é que, ele diminui o tempo de resposta de suas páginas web, o que, em troca, melhora a experiência geral do cliente. Um melhor tempo de resposta permite que os usuários busquem dados perfeitamente.

Você pode verificar se já está instalado no seu servidor, através do phpinfo.

<?php
phpinfo();
Enter fullscreen mode Exit fullscreen mode

Caso não esteja instalado ainda, basta seguir os passos abaixo.

yum install memcached
systemctl enable memcached
Enter fullscreen mode Exit fullscreen mode

OBS: O módulo Memcached 3.0.8 não funciona com o php 7 (ou superior).

Um exemplo de conexão, para verificar se o Memcached está funcionando adequadamente.

<?php
// conectando no servidor memcached
$mcached = new \Memcached();
$mcached->addServer("127.0.0.1", "11211");
// definir uma chave
// chave | valor | tempo em segundos
$mcached->set("carros", ["uno", "gol", "ka"], 10);
// buscando resultado de uma chave
print_r($mcached->get("carros"));
// retorna: Array ( [0] => "uno" [1] => "gol" [2] => "ka" )
// exibir todas as chaves definidas até o momento
print_r($mcached->getAllKeys());
// para remover uma chave definida anteriormente
$mcached->delete("carros");
// fecha a conexão com o servidor
$mcached->close();

A partir do exemplo de conexão, você pode criar funções inteligentes para consumir o cache e preencher o cache com informações atualizadas. O objetivo é obter informações sem precisar consultar o banco de dados. Somente se as informações não estiverem cacheadas iremos consultar a banco de dados e após armazenar as informações em cache para as futuras consultas.

<?php
// exemplo de função para consumir e inserir o cache
function fetchProdutos(): array
{
$produtos = [];
try {
// faz a conexão com o servidor
$mcached = new \Memcached();
$mcached->addServer("127.0.0.1", "11211");
// verifica se já tem no cache, se tiver, retorna os dados do cache
$response = $mcached->get("produtos");
if ($response) {
return $response;
}
// quando não tem no cache, precisa preencher
// então, fazemos a conexão com o mysql
$mysql = new \mysqli("localhost", "root", "123", "db");
$buscarProdutos = $mysql->query("SELECT * FROM `produtos`;");
while ($produto = $buscarProdutos->fetch_assoc()) {
$produtos[] = $produto;
}
// e, definimos no cache nossos dados atualizados
// a cada 1 hora o cache é automaticamente removido e preenchido
// com informações atualizadas do mysql
$mcached->set("produtos", $produtos, (60 * 60));
return $produtos;
} catch (\Exception $e) {
return $produtos;
}
}

Empresas que usam o Memcached
shopify.com
apple.com
walmart.com

Com o Memcached podemos arquitetar excelentes projetos com estruturas de cache em memória RAM utilizando diversos servidores. É recomendado salvar apenas as informações mais importantes.

Fontes
php.net
memcached.org

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

The best way to debug slow web pages cover image

The best way to debug slow web pages

Tools like Page Speed Insights and Google Lighthouse are great for providing advice for front end performance issues. But what these tools can’t do, is evaluate performance across your entire stack of distributed services and applications.

Watch video

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay