sql >> Databasteknik >  >> NoSQL >> Redis

Använder Redis för att cachelagra SQL-resultat

Här är en överraskande sak när det kommer till PHP och MySQL (jag är inte säker på andra språk) - inte att cacha saker i memcached eller Redis är faktiskt snabbare. Mycket snabbare. I grund och botten, om du bara byggde din app och frågade efter MySQL - skulle du få ut mer av det.

Nu till "varför".

InnoDB , standardmotorn, är en superb motor. Specifikt är dess minneshantering (allokering och vad inte) överlägsen alla minneslagringslösningar. Det är ett faktum, du kan slå upp det eller ta mitt ord för det - det kommer åtminstone att prestera lika bra som Redis.

Nu vad händer i din app - du frågar MySQL och cachelagrar resultatet till redis. Men MySQL är också smart nog att behålla cachade resultat. Vad du just gjorde är att skapa en ytterligare filbeskrivning som krävs för att ansluta till Redis. Du använde också en del lagring (RAM) för att cachelagra resultatet som MySQL redan cachade.

Här kommer en annan intressant del - det föredragna sättet att servera PHP-skript är att använda php-fpm - det är mycket snabbare än någon mod_* skit där ute. Ned till kärnan, php-fpm är en övervakarprocess som skapar underordnade processer. De stängs inte av efter att skriptet har serverats, vilket innebär att de cachelagrar anslutningar till MySQL - anslut en gång, använd flera gånger. I grund och botten, om du visar skript med php-fpm , kommer de att återanvända den redan etablerade anslutningen till MySQL, vilket innebär att du inte kommer att öppna och stänga anslutningar för varje begäran - detta är extremt resursvänligt och det låter dig ha en blixtsnabb anslutning till MySQL. MySQL, att vara minneseffektiv och ha det cachade resultatet är mycket snabbare än Redis.

Vad betyder nu allt detta för dig - att ha en korrekt inställning låter dig ha liten kod som är enkel, lätt, som inte involverar Redis och eliminerar alla problem som du kan ha med cache-ogiltigförklaring och vad som inte, och du kommer inte att slösa bort ditt minne att innehålla samma data två gånger.

Ingredienser du behöver för att detta ska fungera:

  • php-fpm
  • MySQL och InnoDB baserade tabeller och framför allt - tillräckligt med RAM och tweaked innodb_buffer_pool_size variabel. Att man styr hur mycket RAM-minne InnoDB får allokera för sina syften - ju större desto bättre.

Du eliminerade Redis från spelet, du höll din kod enkel och lätt att underhålla, du duplicerade inte data, du introducerade inte ytterligare system till spelet och du lät mjukvara som är avsedd att ta hand om data göra sitt jobb. Ganska billig avvägning för maximal användbarhet, även om du kompilerar all programvara från början - det tar inte mer än en timme eller så att få igång den.

Eller så kan du bara ignorera det jag skrev och leta efter en lösning med Redis.



  1. Hur man OCH och INTE i MongoDB $textsökning

  2. CouchDB vs. MongoDB:10 saker du bör veta

  3. Varför ska jag stänga eller hålla Redis-anslutningar öppna?

  4. Ansluter till fjärråtergivningsserver