sql >> Databáze >  >> NoSQL >> Redis

Použití Redis k ukládání výsledků SQL do mezipaměti

Zde je překvapivá věc, pokud jde o PHP a MySQL (jinými jazyky si nejsem jistý) - ne ukládání věcí do mezipaměti do memcached nebo Redis je ve skutečnosti rychlejší. Mnohem rychlejší. V podstatě, kdybyste právě vytvořili svou aplikaci a dotazovali se na MySQL – získali byste z toho více.

Nyní k části „proč“.

InnoDB , výchozí motor, je skvělý motor. Konkrétně je to správa paměti (alokace a co ne) lepší než jakákoli řešení úložiště paměti. To je fakt, můžete si to vyhledat nebo vzít za slovo – bude to přinejmenším fungovat stejně dobře jako Redis.

Nyní, co se stane ve vaší aplikaci – zadáte dotaz na MySQL a výsledek uložíte do mezipaměti do redis. MySQL je však také dostatečně inteligentní na to, aby uchovával výsledky uložené v mezipaměti. Právě jste vytvořili další deskriptor souboru, který je nutný pro připojení k Redis. Také jste použili určité úložiště (RAM) k mezipaměti výsledku, který již MySQL uložil do mezipaměti.

Zde přichází další zajímavá část – preferovaný způsob poskytování PHP skriptů je pomocí php-fpm - je mnohem rychlejší než jakýkoli mod_* kecy tam venku. Až k jádru, php-fpm je proces dohledu, který vytváří podřízené procesy. Po doručení skriptu se nevypnou, což znamená, že ukládají do mezipaměti připojení k MySQL – připojte se jednou, použijte vícekrát. V zásadě, pokud poskytujete skripty pomocí php-fpm , znovu použijí již vytvořené připojení k MySQL, což znamená, že nebudete otevírat a zavírat připojení pro každý požadavek – to je extrémně nenáročné na zdroje a umožňuje vám to bleskově rychlé připojení k MySQL. MySQL, úspora paměti a výsledek uložený v mezipaměti je mnohem rychlejší než Redis.

Co to všechno pro vás znamená - správné nastavení vám umožní mít malý kód, který je jednoduchý, snadný, nezahrnuje Redis a eliminuje všechny problémy, které byste mohli mít s neplatností mezipaměti a co ne a nebudete plýtvat aby vaše paměť obsahovala stejná data dvakrát.

Ingredience, které potřebujete, aby to fungovalo:

  • php-fpm
  • MySQL a InnoDB založené tabulky a především - dostatek paměti RAM a vylepšené innodb_buffer_pool_size variabilní. Ten řídí, kolik RAM může InnoDB alokovat pro své účely – čím větší, tím lepší.

Vyřadili jste Redis ze hry, udržovali jste svůj kód jednoduchý a snadno udržovatelný, neduplikovali jste data, nezaváděli jste do hry další systém a nechali jste software, který se má starat o data, dělat svou práci. Docela levný kompromis za maximální užitečnost, i když zkompilujete veškerý software od začátku – jeho uvedení do provozu nezabere více než hodinu.

Nebo můžete to, co jsem napsal, ignorovat a hledat řešení pomocí Redis.



  1. Dotaz na pole v objektu v poli pomocí Mongo?

  2. Jak ignorovat hodnoty null při odstraňování dokumentu MongoDB?

  3. Vyhledávání v Mongu bez rozlišení velkých a malých písmen

  4. Jak StackExchange.Redis používá více koncových bodů a připojení?