Redis
 sql >> база данни >  >> NoSQL >> Redis

Използване на Redis за кеширане на SQL резултат

Ето едно изненадващо нещо, когато става въпрос за PHP и MySQL (не съм сигурен за други езици) - не кеширането на неща в memcached или Redis всъщност е по-бързо. Много по-бързо. По принцип, ако току-що създадохте приложението си и поискате MySQL - ще извлечете повече от него.

Сега за частта "защо".

InnoDB , двигателят по подразбиране, е превъзходен двигател. По-конкретно, управлението на паметта (разпределение и какво ли още не) е по-добро от всякакви решения за съхранение на памет. Това е факт, можете да го потърсите или да ми повярвате на думата - поне ще се представи толкова добре, колкото Redis.

Сега какво се случва във вашето приложение - вие заявявате MySQL и кеширате резултата в redis. Въпреки това, MySQL е достатъчно интелигентен, за да запази кеширани резултати. Това, което току-що направихте, е да създадете допълнителен файлов дескриптор, който е необходим за свързване с Redis. Освен това използвахте малко място за съхранение (RAM), за да кеширате резултата, който MySQL вече е кешира.

Тук идва още една интересна част - предпочитаният начин за обслужване на PHP скриптове е чрез php-fpm - много е по-бързо от всеки mod_* глупости там. До ядрото, php-fpm е процес на надзорник, който поражда дъщерни процеси. Те не се изключват след сервиране на скрипта, което означава, че кешират връзките към MySQL - свързват се веднъж, използват няколко пъти. По принцип, ако обслужвате скриптове с помощта на php-fpm , те ще използват повторно вече установената връзка с MySQL, което означава, че няма да отваряте и затваряте връзки за всяка заявка - това е изключително удобно за ресурсите и ви позволява да имате светкавична връзка с MySQL. MySQL, като е ефективен от паметта и има кеширан резултат, е много по-бърз от Redis.

Сега какво означава всичко това за вас - наличието на правилна настройка ви позволява да имате малък код, който е прост, лесен, не включва Redis и елиминира всички проблеми, които може да имате с невалидирането на кеша и какво ли още не и няма да губите паметта ви да съдържа едни и същи данни два пъти.

Необходими са ви съставки, за да работи това:

  • php-fpm
  • MySQL и InnoDB базирани таблици и най-вече - достатъчно RAM и настроен innodb_buffer_pool_size променлива. Този контролира колко RAM памет може да задели InnoDB за целите си – колкото по-голяма, толкова по-добре.

Премахнахте Redis от играта, запазихте кода си прост и лесен за поддръжка, не дублирахте данни, не въведохте допълнителна система в играта и оставихте софтуер, който е предназначен да се грижи за данните, да си свърши работата. Доста евтин компромис за максимална полезност, дори ако компилирате целия софтуер от нулата - няма да отнеме повече от час, за да го пуснете и стартирате.

Или можете просто да игнорирате написаното от мен и да потърсите решение с помощта на Redis.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Django REST рамката все още отговаря с кеширани данни дори след като има празни ключове за redis

  2. Не може да се свърже със сървъра Redis от Docker контейнера

  3. Кеширане на JSON обекти от страна на сървъра

  4. хибернация на кеша на второ ниво с Redis - ще подобри ли производителността?

  5. Как да накарам Redis да започне на Heroku?