Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Usando o Redis para armazenar em cache o resultado do SQL


Aqui está uma coisa surpreendente quando se trata de PHP e MySQL (não tenho certeza sobre outras linguagens) - não armazenar coisas em cache no memcached ou Redis é realmente mais rápido. Muito mais rapido. Basicamente, se você acabasse de construir seu aplicativo e consultasse o MySQL - você obteria mais dele.

Agora para a parte do "porquê".

InnoDB , o mecanismo padrão, é um mecanismo excelente. Especificamente, seu gerenciamento de memória (alocação e outros) é superior a qualquer solução de armazenamento de memória. Isso é um fato, você pode pesquisar ou acreditar na minha palavra - ele terá, pelo menos, um desempenho tão bom quanto o Redis.

Agora, o que acontece em seu aplicativo - você consulta o MySQL e armazena em cache o resultado no redis. No entanto, o MySQL também é inteligente o suficiente para manter os resultados em cache. O que você acabou de fazer foi criar um descritor de arquivo adicional necessário para se conectar ao Redis. Você também usou algum armazenamento (RAM) para armazenar em cache o resultado que o MySQL já armazenou em cache.

Aqui vem outra parte interessante - a maneira preferida de servir scripts PHP é usando php-fpm - é muito mais rápido do que qualquer mod_* merda lá fora. Até o núcleo, php-fpm é um processo supervisor que gera processos filho. Eles não desligam depois que o script é servido, o que significa que eles armazenam em cache as conexões com o MySQL - conecte uma vez, use várias vezes. Basicamente, se você servir scripts usando php-fpm , eles reutilizarão a conexão já estabelecida com o MySQL, o que significa que você não abrirá e fechará conexões para cada solicitação - isso é extremamente amigável aos recursos e permite que você tenha uma conexão extremamente rápida com o MySQL. MySQL, sendo eficiente em memória e tendo o resultado em cache é muito mais rápido que o Redis.

Agora, o que tudo isso significa para você - ter uma configuração adequada permite que você tenha um código pequeno que é simples, fácil, não envolve Redis e elimina todos os problemas que você pode ter com invalidação de cache e o que não e você não desperdiçará sua memória para conter os mesmos dados duas vezes.

Ingredientes que você precisa para isso funcionar:
  • php-fpm
  • MySQL e InnoDB tabelas baseadas e acima de tudo - RAM suficiente e innodb_buffer_pool_size ajustado variável. Aquele controla quanta RAM o InnoDB pode alocar para seus propósitos - quanto maior, melhor.

Você eliminou o Redis do jogo, manteve seu código simples e fácil de manter, não duplicou dados, não introduziu um sistema adicional ao jogo e deixou o software destinado a cuidar dos dados fazer seu trabalho. Troca bastante barata pela máxima utilidade, mesmo se você compilar todo o software do zero - não levará mais de uma hora para colocá-lo em funcionamento.

Ou você pode simplesmente ignorar o que escrevi e procurar uma solução usando o Redis.