Mais detalhes sobre como o cache do Redis é utilizado?

Olá!

Estou realizando alguns testes de carga em uma instância do Discourse e notei que, ao buscar repetidamente o mesmo tópico de comentários, a taxa de acertos no cache do Redis caiu, em vez de subir — o que foi um pouco inesperado (para uma mistura de leituras/escritas, vimos uma taxa de acertos de até 85%; para 100% de leituras, a taxa caiu para tão baixo quanto 22%).

Fiz algumas buscas no código e nos fóruns aqui, e ainda não está muito claro para mim como exatamente o cache do Redis é utilizado. O README afirma o seguinte:

Usamos o Redis como cache e para dados transitórios.

Usei o redis-cli para listar os comandos enviados ao cache do Redis durante o teste de carga mencionado acima, e vi principalmente comandos “get” para jobs agendados e para chaves com o prefixo “__mb_backlog_id_n_” (acredito que isso se refira a funcionalidades do MessageBus).

Tenho as seguintes perguntas:

  • Existe uma maneira “fácil” de pesquisar no código quais partes dos dados estão sendo armazenadas em cache no Redis? Adoraria conseguir responder a essas perguntas sozinho, mas, infelizmente, não sou muito familiarizado com aplicações Ruby on Rails (ou com Ruby em geral, na verdade). :slight_smile:
  • O fato de estar logado ou deslogado impacta as taxas de acerto no cache? Como referência, o teste de carga mencionado acima usava uma chave de API de administrador.
  • Dados frequentemente consultados ou relativamente estáticos, como o conteúdo das publicações, são armazenados em cache no Redis? Ou o Redis é usado principalmente para agendamento de jobs e processamento em segundo plano com Sidekiq e afins?

Obrigado desde já!

Esta é a questão principal aqui. O cache mais agressivo ocorre para solicitações anônimas, então sugiro refazer o teste de carga com alguns robôs anônimos.

Existem alguns métodos que podem ser pesquisados com grep, como Discourse.cache.fetch e DistributedCache.new.

Armazenamos em cache alguns blobs de configuração pouco frequentes, mas a abordagem para tópicos consiste principalmente em armazenar em cache toda a resposta para usuários anônimos, permitindo que o aplicativo construa uma resposta com pouco ou nenhum acesso ao banco de dados.

O Redis é amplamente utilizado pelo Sidekiq e pelo MessageBus.

Sensacional, obrigado pela resposta super útil!

Acabei de executar novamente o teste de carga, mas desta vez com solicitações anônimas, e vimos uma enorme melhoria no desempenho! Anteriormente, éramos capazes de atingir cerca de 25 solicitações por segundo em um único host; agora, conseguimos atingir 380! A taxa de acertos do cache Redis também aumentou de ~22% para ~66%. :slight_smile:

Apenas pensei em retornar com os resultados caso alguém estivesse curioso.

Obrigado novamente pela ajuda!