sql >> Database teknologi >  >> NoSQL >> Redis

Brug af Redis til at cache SQL-resultat

Her er en overraskende ting, når det kommer til PHP og MySQL (jeg er ikke sikker på andre sprog) - ikke at cache ting i memcached eller Redis er faktisk hurtigere. Meget hurtigere. Dybest set, hvis du bare byggede din app og forespurgte MySQL - ville du få mere ud af det.

Nu til "hvorfor"-delen.

InnoDB , standardmotoren, er en fremragende motor. Specifikt er dets hukommelsesstyring (allokering og hvad ikke) overlegen i forhold til enhver hukommelseslagringsløsning. Det er et faktum, du kan slå det op eller tage mit ord for det - det vil i det mindste præstere lige så godt som Redis.

Hvad sker der nu i din app - du forespørger på MySQL og cacher resultatet i redis. MySQL er dog også smart nok til at holde cachelagrede resultater. Det, du lige har gjort, er at oprette en ekstra filbeskrivelse, der kræves for at oprette forbindelse til Redis. Du brugte også noget lager (RAM) til at cache det resultat, som MySQL allerede cachelagde.

Her kommer en anden interessant del - den foretrukne måde at betjene PHP-scripts på er ved at bruge php-fpm - det er meget hurtigere end nogen mod_* lort derude. Ned til kernen, php-fpm er en supervisorproces, der afføder underordnede processer. De lukker ikke ned, efter at scriptet er serveret, hvilket betyder, at de cacher forbindelser til MySQL - tilslut én gang, brug flere gange. Grundlæggende, hvis du tjener scripts ved hjælp af php-fpm , vil de genbruge den allerede etablerede forbindelse til MySQL, hvilket betyder, at du ikke åbner og lukker forbindelser for hver anmodning - dette er ekstremt ressourcevenligt, og det lader dig få en lynhurtig forbindelse til MySQL. MySQL, at være hukommelseseffektiv og have det cachelagrede resultat er meget hurtigere end Redis.

Hvad betyder alt dette for dig - at have en ordentlig opsætning giver dig mulighed for at få en lille kode, der er enkel, nem, ikke involverer Redis og eliminerer alle de problemer, du måtte have med cache-invalidering og hvad der ikke, og du vil ikke spilde din hukommelse til at indeholde de samme data to gange.

Ingredienser du skal bruge for at dette virker:

  • php-fpm
  • MySQL og InnoDB baseret tabeller og mest af alt - tilstrækkelig RAM og tweaked innodb_buffer_pool_size variabel. At man styrer, hvor meget RAM InnoDB må allokere til sine formål - jo større jo bedre.

Du eliminerede Redis fra spillet, du holdt din kode enkel og nem at vedligeholde, du duplikerede ikke data, du introducerede ikke yderligere system til spillet, og du lod software, der er beregnet til at tage sig af data, gøre sit arbejde. En ret billig afvejning for maksimal anvendelighed, selvom du kompilerer al softwaren fra bunden - det tager ikke mere end en time eller deromkring at få det op at køre.

Eller du kan bare ignorere det, jeg skrev, og se efter en løsning ved hjælp af Redis.



  1. Hvad er de vigtigste forskelle mellem Redis Pub/Sub og Redis Stream?

  2. Installer CouchDB på Debian 9

  3. Spring data rest-applikation henter ikke data fra databasen efter implementering af redis caching

  4. Fremhæv underfelter til topniveau i projektion uden at angive alle nøgler