sql >> Database >  >> NoSQL >> Redis

Redis gebruiken om het SQL-resultaat te cachen

Hier is iets verrassends als het gaat om PHP en MySQL (ik ben niet zeker van andere talen) - niet het cachen van dingen in memcached of Redis is eigenlijk sneller. Veel sneller. Kortom, als je net je app hebt gebouwd en MySQL hebt opgevraagd, zou je er meer uit halen.

Nu voor het "waarom"-gedeelte.

InnoDB , de standaard engine, is een uitstekende engine. In het bijzonder is het geheugenbeheer (allocatie en wat niet) superieur aan alle geheugenopslagoplossingen. Dat is een feit, je kunt het opzoeken of me op mijn woord geloven - het zal in ieder geval net zo goed presteren als Redis.

Wat gebeurt er nu in uw app - u vraagt ​​​​MySQL op en slaat het resultaat in de cache op in redis. MySQL is echter ook slim genoeg om de resultaten in de cache te bewaren. Wat je zojuist hebt gedaan, is een extra bestandsdescriptor maken die nodig is om verbinding te maken met Redis. Je hebt ook wat opslagruimte (RAM) gebruikt om het resultaat te cachen dat MySQL al in de cache had opgeslagen.

Hier komt nog een interessant onderdeel - de geprefereerde manier om PHP-scripts te serveren is door php-fpm te gebruiken - het is veel sneller dan elke mod_* rotzooi daar. Tot in de kern, php-fpm is een supervisorproces dat onderliggende processen voortbrengt. Ze worden niet afgesloten nadat het script is geserveerd, wat betekent dat ze verbindingen met MySQL in de cache plaatsen - één keer verbinden, meerdere keren gebruiken. Kortom, als u scripts serveert met behulp van php-fpm , zullen ze de reeds tot stand gebrachte verbinding met MySQL hergebruiken, wat betekent dat u geen verbindingen voor elk verzoek zult openen en sluiten - dit is uiterst vriendelijk voor hulpbronnen en het geeft u een bliksemsnelle verbinding met MySQL. MySQL, omdat het geheugenefficiënt is en het resultaat in de cache heeft, is veel sneller dan Redis.

Wat betekent dit nu allemaal voor u - met een goede installatie kunt u kleine code hebben die eenvoudig, gemakkelijk is, geen Redis omvat en alle problemen elimineert die u zou kunnen hebben met cache-invalidatie en wat niet, en u zult niet verspillen uw geheugen om dezelfde gegevens twee keer te bevatten.

Ingrediënten die je nodig hebt om dit te laten werken:

  • php-fpm
  • MySQL en InnoDB gebaseerde tabellen en vooral - voldoende RAM en getweaked innodb_buffer_pool_size variabel. Die bepaalt hoeveel RAM InnoDB mag toewijzen voor zijn doeleinden - hoe groter hoe beter.

Je elimineerde Redis uit het spel, je hield je code eenvoudig en gemakkelijk te onderhouden, je dupliceerde geen gegevens, je introduceerde geen extra systeem in het spel en je liet software die bedoeld is om voor gegevens te zorgen zijn werk doen. Vrij goedkope afweging voor maximale bruikbaarheid, zelfs als je alle software helemaal opnieuw compileert - het duurt niet meer dan een uur om het in gebruik te nemen.

Of je kunt gewoon negeren wat ik heb geschreven en een oplossing zoeken met Redis.



  1. Hoe kan ik testen of mijn redis-cache werkt?

  2. Een sleutel verwijderen uit een MongoDB-document met Mongoose

  3. How-to:gebruik de Apache HBase REST-interface, deel 1

  4. MongoDB installeren op Ubuntu 18.04