Plus de détails sur l'utilisation du cache Redis ?

Salut !

J’ai effectué quelques tests de charge sur une instance Discourse et j’ai remarqué que lorsque je récupérais à plusieurs reprises le même fil de commentaires, le taux de succès du cache Redis diminuait au lieu d’augmenter, ce qui était un peu inattendu (pour un mélange de lectures/écritures, nous avons observé un taux de succès allant jusqu’à 85 %, tandis que pour 100 % de lectures, il a chuté jusqu’à 22 %).

J’ai fait quelques recherches dans la base de code et sur les forums ici, mais l’utilisation exacte du cache Redis reste un peu floue pour moi. Le README indique ceci :

Nous utilisons Redis comme cache et pour les données transitoires.

J’ai utilisé redis-cli pour extraire les commandes envoyées au cache Redis pendant le test de charge mentionné ci-dessus, et j’ai principalement vu des commandes « get » pour les tâches planifiées et pour les clés préfixées par « __mb_backlog_id_n_ » (je crois que cela fait référence à des éléments de MessageBus).

Voici mes questions :

  • Existe-t-il un moyen « simple » de parcourir la base de code pour identifier quelles données sont mises en cache dans Redis ? J’aimerais beaucoup pouvoir répondre à ces questions par moi-même, mais malheureusement, je ne suis pas très familier avec les applications Ruby on Rails (ni avec Ruby en général, d’ailleurs). :slight_smile:
  • Le fait d’être connecté ou déconnecté a-t-il un impact sur les taux de succès du cache ? Pour référence, le test de charge mentionné ci-dessus utilisait une clé d’API administrateur.
  • Les données fréquemment interrogées ou relativement statiques, comme le contenu des messages, sont-elles mises en cache dans Redis ? Ou Redis est-il principalement utilisé pour la planification des tâches et le traitement en arrière-plan avec Sidekiq et autres ?

Merci d’avance !

C’est l’élément principal ici. La mise en cache la plus agressive concerne les requêtes anonymes, je vous suggère donc de relancer le test de charge avec quelques robots anonymes.

Il existe quelques méthodes facilement recherchables avec grep, comme Discourse.cache.fetch et DistributedCache.new.

Nous mettons bien en cache certains blocs de configuration peu fréquents, mais l’approche pour les sujets consiste principalement à mettre en cache l’intégralité de la réponse pour les anonymes, permettant à l’application de générer une réponse en touchant à peine la base de données.

Redis est largement utilisé pour Sidekiq et MessageBus.

Super, merci pour cette réponse vraiment utile !

Je viens de relancer le test de charge, mais cette fois avec des requêtes anonymes, et nous avons constaté une énorme amélioration des performances ! Auparavant, nous ne pouvions traiter qu’environ 25 requêtes par seconde sur un seul hôte ; maintenant, nous atteignons 380 ! Le taux de succès du cache Redis est également passé d’environ 22 % à environ 66 %. :slight_smile:

Je pensais simplement revenir vers vous avec les résultats au cas où cela intéresserait quelqu’un.

Merci encore pour votre aide !