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
iInnoDB
oparte na tabelach i przede wszystkim - wystarczająca ilość pamięci RAM i podrasowanyinnodb_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.