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
aInnoDB
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.