Mehr Details zur Nutzung des Redis Caches?

Hallo!

Ich habe einige Lasttests an einer Discourse-Instanz durchgeführt und festgestellt, dass die Redis-Cache-Trefferquote sank, anstatt zu steigen, als ich denselben Kommentarthread wiederholt abrufte. Das war etwas unerwartet (bei einer Mischung aus Lese- und Schreibzugriffen sahen wir eine Cache-Trefferquote von bis zu 85 %, bei 100 % Lesezugriffen fiel sie sogar auf bis zu 22 %).

Ich habe etwas im Codebase und in den Foren hier gesucht, aber mir ist noch nicht ganz klar, wie genau der Redis-Cache genutzt wird. Im README heißt es dazu:

Wir verwenden Redis als Cache und für flüchtige Daten.

Ich habe redis-cli verwendet, um die Befehle zu speichern, die während des oben genannten Lasttests an den Redis-Cache gesendet wurden. Dabei sah ich hauptsächlich „get"-Befehle für geplante Aufgaben und für Schlüssel mit dem Präfix „__mb_backlog_id_n_" (ich nehme an, das bezieht sich auf MessageBus-Funktionen).

Ich habe folgende Fragen:

  • Gibt es eine „einfache" Möglichkeit, im Codebase nachzusehen, welche Daten in Redis gecacht werden? Ich würde diese Fragen gerne selbst beantworten können, bin aber leider nicht besonders vertraut mit Ruby on Rails-Anwendungen (oder Ruby im Allgemeinen). :slight_smile:
  • Beeinflusst der Login-Status (eingeloggt/ausgeloggt) die Cache-Trefferquote? Als Referenz: Der oben genannte Lasttest wurde mit einem Admin-API-Schlüssel durchgeführt.
  • Werden häufig abgefragte oder relativ statische Daten wie Post-Inhalte in Redis gecacht? Oder wird Redis hauptsächlich für die Job-Planung und Hintergrundverarbeitung mit Sidekiq und ähnlichen Tools genutzt?

Vielen Dank im Voraus!

Das ist hier der Hauptpunkt. Das aggressivste Caching erfolgt bei anonymen Anfragen. Ich empfehle daher, den Lasttest mit einigen anonymen Bots zu wiederholen.

Es gibt einige Methoden, die sich mit grep durchsuchen lassen, wie etwa Discourse.cache.fetch und DistributedCache.new.

Wir cachen einige selten genutzte Konfigurations-Blobs, aber der Ansatz für Themen besteht größtenteils darin, die gesamte Antwort für anonyme Nutzer zu cachen. Dadurch kann die Anwendung eine Antwort erstellen, ohne die Datenbank nennenswert zu belasten.

Redis wird intensiv für Sidekiq und MessageBus genutzt.

Toll, danke für die super hilfreiche Antwort!

Ich habe den Lasttest gerade erneut durchgeführt, diesmal jedoch mit anonymen Anfragen, und wir haben eine enorme Leistungsverbesserung festgestellt! Zuvor konnten wir auf einem einzelnen Host nur etwa 25 Anfragen pro Sekunde bewältigen, jetzt schaffen wir 380! Die Redis-Cache-Trefferquote ist ebenfalls von ~22 % auf ~66 % gestiegen. :slight_smile:

Ich wollte nur kurz die Ergebnisse mitteilen, falls jemand neugierig war.

Nochmals vielen Dank für die Hilfe!