Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Verwenden von Redis zum Zwischenspeichern von SQL-Ergebnissen

Hier ist eine überraschende Sache, wenn es um PHP und MySQL geht (bei anderen Sprachen bin ich mir nicht sicher) - nicht Das Zwischenspeichern von Inhalten in Memcached oder Redis ist tatsächlich schneller. Viel schneller. Wenn Sie einfach Ihre App erstellt und MySQL abgefragt hätten, würden Sie im Grunde mehr herausholen.

Nun zum „Warum“-Teil.

InnoDB , die Standard-Engine, ist eine hervorragende Engine. Insbesondere die Speicherverwaltung (Zuweisung und was nicht) ist allen Speicherlösungen überlegen. Das ist eine Tatsache, Sie können es nachschlagen oder sich auf mich verlassen - es wird mindestens so gut funktionieren wie Redis.

Was passiert nun in Ihrer App – Sie fragen MySQL ab und cachen das Ergebnis in redis. MySQL ist jedoch auch intelligent genug, um Ergebnisse zwischenzuspeichern. Sie haben gerade einen zusätzlichen Dateideskriptor erstellt, der für die Verbindung mit Redis erforderlich ist. Sie haben auch etwas Speicher (RAM) verwendet, um das Ergebnis zwischenzuspeichern, das MySQL bereits zwischengespeichert hat.

Hier kommt ein weiterer interessanter Teil – die bevorzugte Art, PHP-Skripte bereitzustellen, ist die Verwendung von php-fpm - Es ist viel schneller als jeder mod_* Mist da draußen. Bis zum Kern, php-fpm ist ein Supervisor-Prozess, der untergeordnete Prozesse hervorbringt. Sie werden nicht heruntergefahren, nachdem das Skript bereitgestellt wurde, was bedeutet, dass sie Verbindungen zu MySQL zwischenspeichern - einmal verbinden, mehrmals verwenden. Grundsätzlich, wenn Sie Skripte mit php-fpm bereitstellen , werden sie die bereits hergestellte Verbindung zu MySQL wiederverwenden, was bedeutet, dass Sie nicht für jede Anfrage Verbindungen öffnen und schließen müssen - dies ist äußerst ressourcenschonend und ermöglicht Ihnen eine blitzschnelle Verbindung zu MySQL. MySQL ist speichereffizient und hat das zwischengespeicherte Ergebnis viel schneller als Redis.

Nun, was bedeutet das alles für Sie – mit einer richtigen Einrichtung haben Sie kleinen Code, der einfach und leicht ist, kein Redis beinhaltet und alle Probleme beseitigt, die Sie möglicherweise mit der Cache-Invalidierung haben und was nicht, und Sie werden nichts verschwenden Ihr Gedächtnis, dieselben Daten zweimal zu enthalten.

Zutaten, die Sie benötigen, damit dies funktioniert:

  • php-fpm
  • MySQL und InnoDB basierte Tabellen und vor allem - ausreichend RAM und optimierte innodb_buffer_pool_size Variable. Dieser steuert, wie viel RAM InnoDB für seine Zwecke zuweisen darf - je größer, desto besser.

Sie haben Redis aus dem Spiel eliminiert, Sie haben Ihren Code einfach und leicht zu warten gehalten, Sie haben keine Daten dupliziert, Sie haben kein zusätzliches System in das Spiel eingeführt und Sie haben Software, die sich um Daten kümmern soll, ihre Arbeit machen lassen. Ziemlich billiger Kompromiss für maximale Nützlichkeit, selbst wenn Sie die gesamte Software von Grund auf neu kompilieren - es dauert nicht länger als eine Stunde, um sie zum Laufen zu bringen.

Oder Sie können einfach ignorieren, was ich geschrieben habe, und mit Redis nach einer Lösung suchen.