Cache i indeksery w Magento 2
Opublikowano: 17 lipca 2026
"Dlaczego zmiana w panelu admina nie jest widoczna na froncie?" - to najczęstsze pytanie każdego nowego admina Magento. Odpowiedź prawie zawsze: cache lub indeksery. Ten poradnik pokazuje, jak rozumieć i zarządzać oboma systemami.
Dlaczego Magento ma cache i indeksery
Magento z natury jest wolny - każdy widok strony wymaga wielu zapytań SQL i logiki PHP. Cache i indeksery to mechanizmy przyspieszające odpowiedzi sklepu:
- Cache - zapamiętane wcześniej wygenerowane fragmenty (HTML, konfiguracje, layouty). Magento serwuje gotowe z cache zamiast generować od nowa.
- Indeksery - zoptymalizowane tabele bazy z pre-przygotowanymi danymi (ceny produktów per Customer Group, dostępność magazynowa, kategorie → produkty). Magento odpytuje proste indeksy zamiast skomplikowanych JOINów.
Cena: zmiana w panelu admina (np. nowa cena produktu) nie pojawi się natychmiast - trzeba odświeżyć cache i/lub przeindeksować.
Cache Management
Ścieżka: System > Tools > Cache Management
Status cache
Każdy typ cache ma status:
| Status | Wygląd | Znaczenie |
|---|---|---|
| Enabled | zielony | Działa, dane aktualne. |
| Invalidated | żółty / pomarańczowy | Działa, ale dane są nieaktualne - należy odświeżyć. |
| Disabled | szary / czerwony | Wyłączony - Magento generuje wszystko od nowa za każdym razem (wolno). |
Co znaczy Invalidated: Magento sam zauważa, że jakaś konfiguracja się zmieniła i oznacza odpowiedni cache jako Invalidated. Na produkcji odśwież natychmiast -
Invalidatedznaczy, że obciążenie bazy rośnie.
Typy cache w Magento
| Typ cache | Co cache'uje | Kiedy odświeżać |
|---|---|---|
| Configuration | Konfiguracja sklepu (core_config_data). |
Po zmianie czegokolwiek w Stores > Configuration. |
| Layouts | XML-e layoutów (które bloki renderują się gdzie). | Po wgraniu / zmianie modułów lub motywu. |
| Blocks HTML output | Wygenerowane fragmenty HTML bloków. | Po zmianie szablonów / treści w blokach CMS. |
| Collections Data | Wyniki collection queries. | Po zmianach w katalogu (produkty, kategorie). |
| Reflection Data | Cache PHP reflection. | Rzadko - głównie po deploy nowego kodu. |
| Database DDL operations | Schemat bazy. | Po setup:upgrade. |
| Compiled Config | Skompilowane konfiguracje DI. | Po deploy kodu. |
| EAV types and attributes | Definicje atrybutów EAV. | Po dodaniu / zmianie atrybutów. |
| Customer Notification | Powiadomienia klienta. | Bardzo rzadko. |
| Integrations Configuration | Konfiguracja integracji API. | Po zmianie integrations. |
| Integrations API Configuration | Konfiguracja API tokenów. | Po zmianie integrations. |
| Page Cache (Full Page) | Cały HTML stron (najważniejszy dla wydajności!). | Po zmianach w katalogu, treści, cenach. |
| Translations | Tłumaczenia i18n. | Po wgraniu nowych tłumaczeń. |
| Web Services Configuration | API REST/SOAP. | Po zmianie webapi.xml. |
Jak odświeżyć cache w panelu
System > Tools > Cache Management.- Zaznacz checkboxem typy cache do odświeżenia (zwykle te ze statusem Invalidated).
- Nad tabelą wybierz akcję Refresh.
- Kliknij Submit.
Przycisk "Flush Magento Cache"
W prawym górnym rogu Cache Management jest pomarańczowy przycisk Flush Magento Cache - czyści WSZYSTKIE cache sklepu.
Używaj ostrożnie: Flush całości = chwilowy duży skok obciążenia serwera (każda strona musi się od nowa wygenerować). Na produkcji odświeżaj tylko to, co trzeba - nie wszystko hurtem. Ten przycisk to "młotek na wypadek awarii", nie codzienna rutyna.
Cache przez CLI (szybsze + skryptowalne)
# Wyczyść wszystkie cache
bin/magento cache:flush
# Wyczyść konkretne typy
bin/magento cache:clean config full_page block_html
# Włącz / wyłącz konkretne typy
bin/magento cache:disable full_page
bin/magento cache:enable full_page
# Status wszystkich cache
bin/magento cache:status
clean vs flush: -
cache:clean- usuwa wpisy z cache (Magento dogeneruje przy najbliższym requestie).
cache:flush- czyści całą warstwę cache backend (Redis, plik, Varnish). Bardziej drastyczne, czasem potrzebne np. po deploy.
Indeksery
Ścieżka: System > Tools > Index Management
Tryby indeksowania
Każdy indekser ma jeden z dwóch trybów:
| Tryb | Działanie | Kiedy stosować |
|---|---|---|
| Update on Save | Reindex natychmiast po każdej zmianie. Może być powolne przy masowych operacjach. | Małe sklepy, środowiska testowe. |
| Update by Schedule | Reindex partiami przez cron (typowo co minutę). Szybsze dla bulk operations. | Produkcja, większe sklepy. |
Schedule mode = standard produkcyjny: Na produkcji zawsze ustaw indeksery w tryb Update by Schedule - masowe zmiany (import produktów, masowy update cen) nie blokują panelu. Wymaga działającego cron-a.
Zmiana trybu
W panelu:
System > Tools > Index Management.- Zaznacz indekser(y).
- Actions → Update by Schedule lub Update on Save.
- Submit.
Lub CLI:
# Wszystkie indeksery na schedule
bin/magento indexer:set-mode schedule
# Konkretny indekser na realtime
bin/magento indexer:set-mode realtime catalog_product_price
# Sprawdź bieżący tryb
bin/magento indexer:show-mode
Status indekserów
| Status | Znaczenie |
|---|---|
| Ready | Indeks aktualny. |
| Reindex required | Zmienione dane czekają na reindex. |
| Processing | Reindex w toku. |
Reindex manualny
# Wszystkie indeksery
bin/magento indexer:reindex
# Konkretne
bin/magento indexer:reindex catalog_product_price catalog_category_product
Lista głównych indekserów
| Indekser | Co indeksuje |
|---|---|
catalog_category_product |
Powiązania kategoria-produkt. |
catalog_product_category |
Powiązania produkt-kategoria (odwrotny). |
catalogrule_rule |
Reguły cenowe katalogu. |
catalog_product_price |
Ceny produktów (per Customer Group, Website). |
cataloginventory_stock |
Stany magazynowe. |
inventory |
MSI Multi-Source Inventory. |
catalogsearch_fulltext |
Indeks wyszukiwarki katalogu. |
catalog_product_attribute |
Atrybuty produktu (Layered Navigation). |
customer_grid |
Grid klientów w panelu admina. |
Typowe scenariusze
Scenariusz 1: Zmieniłem cenę produktu i nie widzę zmian na froncie
bin/magento indexer:reindex catalog_product_price
bin/magento cache:clean full_page block_html
Scenariusz 2: Zaimportowałem 10000 produktów
# Przed importem
bin/magento indexer:set-mode schedule
# (po imporcie)
bin/magento indexer:reindex
bin/magento cache:flush
Import 10000 produktów w trybie realtime może trwać godzinami - schedule rozkłada to na cron i import w sumie zajmuje 10× mniej czasu.
Scenariusz 3: Edytowałem treść strony CMS i nie widzę zmian
bin/magento cache:clean full_page block_html
Scenariusz 4: Zmieniłem konfigurację w Stores > Configuration
bin/magento cache:clean config full_page
Scenariusz 5: Zmiana motywu / wdrożenie nowego modułu
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
Scenariusz 6: "Dlaczego strona ładuje się tak wolno?"
Najczęściej Page Cache wyłączone:
bin/magento cache:status # sprawdź status
bin/magento cache:enable full_page
Jeśli mimo to wolno - sprawdź:
- Varnish (jeśli używany).
- Indekser
catalogsearch_fulltext(długi reindex blokuje katalog). - Procesory queue (
bin/magento queue:consumers:list).
Cache backendy
Magento może używać różnych backendów cache:
| Backend | Plusy | Minusy |
|---|---|---|
| File (default) | Brak zależności, działa od ręki. | Wolne, problematyczne na shared filesystem. |
| Redis | Szybkie, scalable, dedykowane backend dla cache i sesji. | Wymaga osobnego serwera Redis. |
| Varnish | Najszybsze (Full Page Cache na poziomie HTTP). | Wymaga konfiguracji + reverse proxy. |
Produkcja zawsze powinna używać Redis + Varnish. File cache jest tylko dla developmentu / małych testów.
Konfiguracja w app/etc/env.php (Redis) lub app/etc/config.php (Varnish) - wymaga interwencji dewelopera.
Najczęstsze problemy
bin/magento cache:flush "command not found"
Brakuje uprawnień wykonania lub jesteś poza katalogiem Magento:
cd /var/www/magento
php bin/magento cache:flush
Po flush cache strona jest błyskawicznie wolna
To chwilowo normalne - Page Cache jest pusty, każda strona generuje się pierwszy raz wolno. Po kilku minutach normalnej pracy cache się "rozgrzewa".
Indekser stuck w "Processing"
bin/magento indexer:status # sprawdź który stoi
bin/magento indexer:reset # reset wszystkich
bin/magento indexer:reindex # przeindexuj od nowa
Zmiana w panelu nie zapisuje się / nie pojawia w bazie
Cache config zachował starą wartość:
bin/magento cache:clean config
Następnie powtórz zmianę w panelu.
Page Cache jest Disabled
Sprawdź deploy mode:
bin/magento deploy:mode:show
W trybie developer Page Cache jest często wyłączony. Na produkcji zawsze ustaw:
bin/magento deploy:mode:set production
bin/magento cache:enable full_page
Powiązane
- Magento Cron - bez crona indeksery w trybie schedule nie działają
- Logi i diagnostyka - gdzie szukać błędów cache / indekserów