Przejdź do głównej zawartości

Architektura

Szybka referencja, co jest w pluginie — przydatna dla developerów theme’a, autorów pluginów i każdego diagnozującego nieoczekiwane zachowanie.

P2Lab\Cache\
├── Api/ REST controllers (endpointy admin)
├── Command/ Komendy konsoli Symfony
├── Decorator/ Dekoratory wokół core serwisów Shopware
├── DependencyInjection/
├── Entity/ Definicje DAL dla własnych tabel pluginu
├── Enum/ Stałe trybów / strategii
├── Factory/ Fabryka cache-adapter
├── Framework/ Implementacja cache store
├── Helper/
├── Message/ Async message dispatchowane przez plugin
├── MessageHandler/ Handlery dla tych message
├── Migration/ Migracje bazy danych
├── P2LabCache.php Entry point pluginu (lifecycle)
├── Resources/
├── ScheduledTask/ Trzy nocne zadania czyszczące (+ handlery)
├── Service/ Serwisy domenowe (większość logiki)
├── Storefront/
├── Subscriber/ Event subscribery wpinające się w Shopware
└── ValueObject/
SerwisCo robi
CacheEntryServiceCzyta / zapisuje tabelę metadanych p2lab_cache_entry
CacheInvalidationServiceTop-level API inwalidacji — clearAll(), clearAllProducts() itp.
CacheWarmupServiceOdkrywa cache’owalne URL-e, tworzy wpisy progress, batchuje je
CacheSizeServiceRaportuje całkowity rozmiar cache (dysk dla Filesystem; baza dla Redis / APCu)
SmartInvalidationAnalyzerMapowanie pole-do-tagu dla trybu Smart inwalidacji
CacheInvalidationLogServicePersystuje wiersze w p2lab_cache_invalidation_log
ReverseProxyLogServicePersystuje wiersze w p2lab_cache_reverse_proxy_log, plus query analityczne
CacheTagServiceBuduje zestaw tagów dla danej odpowiedzi
TagParserServiceParsuje nazwy tagów z powrotem na referencje encji dla widoków logu
RequestServiceInspekcjonuje żądania, by zdecydować o cacheability i wyliczyć klucz cache
SettingsServiceCzyta wartości system_config z fallbackiem per kanał sprzedaży
DekorujeCel
SalesChannelContextFactoryCache’owany sales-channel context dla workerów warmupu
ReverseProxyGatewayDodaje strategię xkey + blocklistę + splitowanie / skracanie przed wysłaniem purge do Varnisha
SubscriberSłuchaCo robi
CacheEntryFlushSubscriberKernelEvents::TERMINATEPersystuje metadane nowo zapisanych wpisów po wysłaniu odpowiedzi
CacheInvalidationSubscriberEventy entity-writtenTriggeruje pipeline inwalidacji (Manual / Basic / Extended / Precise / Smart)
CacheResponseSubscriberKernelEvents::RESPONSEZapisuje odpowiedź do backendu, jeśli cache’owalna; ustawia nagłówki Cache-Control
NotificationMessageSubscriberCustom plugin eventsPushuje notyfikacje admin (ukończenie warmupu itp.)
TagCollectionSubscriberEventy entity-loadedZbiera zestaw tagów, który odpowiedź powinna nieść
XkeySubscriberPre-purge eventAplikuje blocklistę, splitowanie i skracanie na wychodzące nagłówki xkey
MessageHandlerCel
CacheWarmupStartMessageCacheWarmupStartHandlerOdpala run warmupu; spawnuje message batchowe
CacheWarmupBatchMessageCacheWarmupBatchHandlerPrzetwarza jeden batch URL-i
ZadanieDomyślny interwałCo robi
p2lab_cache.cleanup_cache_entries24 hUsuwa osierocone wiersze p2lab_cache_entry
p2lab_cache.cleanup_invalidation_log24 hUsuwa wiersze logu inwalidacji starsze niż 30 dni
p2lab_cache.cleanup_reverse_proxy_log24 hUsuwa wiersze logu reverse-proxy starsze niż 30 dni

Zobacz Zadania zaplanowane.

TabelaCel
p2lab_cache_entryMetadane każdego wpisu cache (rozmiar, typ, czas generowania / hit)
p2lab_cache_invalidation_logKażde zdarzenie inwalidacji
p2lab_cache_reverse_proxy_logKażdy xkey purge wysłany do Varnisha
p2lab_cache_warmup_progressJeden wiersz na run warmupu; śledzi offset i liczniki
p2lab_cache_warmup_failed_urlURL-e, które failowały podczas warmupu

Tagi cache tworzone przez plugin wszystkie zaczynają się od p2c-. Konwencje:

  • p2c-product-<id> — pełny tag produktu (jakakolwiek zmiana pola purguje)
  • p2c-product-<id>.<field> — tag na poziomie pola w trybie Smart (np. .price, .stock)
  • p2c-product-stock_<id> — tag tylko-stock, wystawiony osobno, by kategoria blocklisty product_stock mogła go izolować
  • p2c-category-<id> — pełny tag kategorii
  • p2c-listing-<categoryId> — tag listingu (purgowany, gdy pole członkowskiego produktu listing-affecting się zmienia)
  • p2c-cms-page-<id> — tag strony CMS
  • p2c-buybox-<productId> — tag async buyboxa

Te tagi są wysyłane do Varnisha przez xkey i też napędzają lokalny lookup inwalidacji.

  • Dodaj nowy typ cache: zasubskrybuj KernelEvents::RESPONSE, ustaw typ przez obiekt odpowiedzi i dodaj prefiks tagu. Zaktualizuj getCacheStatsByType(), by o nim wiedział.
  • Dodaj pole do mapowania Smart: dekoruj SmartInvalidationAnalyzer i nadpisuj analyzeProductChange() lub analyzeCategoryChange().
  • Dodaj kategorię blocklisty xkey: rozszerz config xkeyTagBlocklist + dodaj pasujący wzorzec w XkeySubscriber.