Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Używanie Redis do buforowania wyników SQL

Oto zaskakująca rzecz, jeśli chodzi o PHP i MySQL (nie jestem pewien co do innych języków) - nie buforowanie rzeczy w memcached lub Redis jest w rzeczywistości szybsze. O wiele szybciej. Zasadniczo, jeśli właśnie zbudowałeś swoją aplikację i wykonałeś zapytanie do MySQL - uzyskasz z tego więcej.

Teraz przejdźmy do części „dlaczego”.

InnoDB , domyślny silnik, jest doskonałym silnikiem. W szczególności zarządzanie pamięcią (alokacja i inne elementy) jest lepsze od wszelkich rozwiązań do przechowywania pamięci. To fakt, możesz to sprawdzić lub uwierz mi na słowo – będzie przynajmniej działał tak dobrze, jak Redis.

Teraz, co dzieje się w Twojej aplikacji — wysyłasz zapytanie do MySQL i buforujesz wynik w redis. Jednak MySQL jest również wystarczająco inteligentny, aby przechowywać wyniki w pamięci podręcznej. To, co właśnie zrobiłeś, to utworzenie dodatkowego deskryptora pliku, który jest wymagany do połączenia z Redis. Zużyłeś również trochę pamięci (RAM) do buforowania wyników, które MySQL już buforował.

Oto kolejna interesująca część - preferowanym sposobem obsługi skryptów PHP jest użycie php-fpm - jest znacznie szybszy niż jakikolwiek mod_* gówno tam. Aż do sedna, php-fpm to proces nadzorcy, który tworzy procesy podrzędne. Nie wyłączają się po udostępnieniu skryptu, co oznacza, że ​​buforują połączenia z MySQL - połącz raz, użyj wiele razy. Zasadniczo, jeśli obsługujesz skrypty za pomocą php-fpm , ponownie wykorzystają już nawiązane połączenie z MySQL, co oznacza, że ​​nie będziesz otwierać ani zamykać połączeń dla każdego żądania — jest to niezwykle przyjazne dla zasobów i umożliwia błyskawiczne połączenie z MySQL. MySQL, który jest wydajny pod względem pamięci i ma buforowany wynik, jest znacznie szybszy niż Redis.

Teraz, co to wszystko oznacza dla Ciebie - posiadanie odpowiedniej konfiguracji pozwala mieć mały kod, który jest prosty, łatwy, nie wymaga Redis i eliminuje wszystkie problemy, które możesz mieć z unieważnianiem pamięci podręcznej, a co nie, i nie będziesz marnować Twoja pamięć może zawierać te same dane dwukrotnie.

Składniki potrzebne do działania:

  • php-fpm
  • MySQL i InnoDB oparte na tabelach i przede wszystkim - wystarczająca ilość pamięci RAM i podrasowany innodb_buffer_pool_size zmienny. Ten kontroluje, ile pamięci RAM InnoDB może przydzielić do swoich celów – im większa, tym lepiej.

Wyeliminowałeś Redisa z gry, zachowałeś prosty i łatwy w utrzymaniu kod, nie duplikowałeś danych, nie wprowadzałeś dodatkowego systemu do gry i pozwalałeś programowi, który ma dbać o dane, robi swoje. Dość tani kompromis dla maksymalnej użyteczności, nawet jeśli skompilujesz całe oprogramowanie od zera - jego uruchomienie nie zajmie więcej niż godzinę.

Możesz też po prostu zignorować to, co napisałem i poszukać rozwiązania za pomocą Redis.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis nie odbiera wydarzeń transmitowanych w Laravel 5.1

  2. NodeJS - bezpiecznie połącz się z zewnętrznym serwerem redis

  3. jak mogę uruchomić sesje za pomocą redis, express i socket.io?

  4. Anuluj oferty pracy w Laravel

  5. Redis, wygaśnięcie sesji i wyszukiwanie wsteczne