Кеш

← Кеш

Ashterix

docs(articles): From Magento to Symfony, a requalification guide grouped into sections

uk/articles/magento-to-symfony/infrastructure/cache.md новий файл +36 −0

1 + # Кеш
2 +
3 + **Magento** · CacheInterface
4 +
5 + ```php
6 + $data = $this->cache->load('faq_popular');
7 + if ($data === false) {
8 + $data = $this->serializer->serialize(
9 + $this->repository->getPopular(5)
10 + );
11 + $this->cache->save($data, 'faq_popular', ['faq'], 3600);
12 + }
13 +
14 + $this->cache->clean(['faq']);
15 + ```
16 +
17 + **Symfony** · Cache Contracts
18 +
19 + ```php
20 + public function __construct(
21 + private TagAwareCacheInterface $cache,
22 + ) {}
23 +
24 + $popular = $this->cache->get('faq_popular', function (ItemInterface $item) {
25 + $item->expiresAfter(3600);
26 + $item->tag(['faq']);
27 + return $this->questions->findPopularIds(5);
28 + });
29 +
30 + $this->cache->invalidateTags(['faq']);
31 + ```
32 +
33 + - `get()` з callback захищає від stampede: обчислення запускає лише один процес.
34 + - Пули описують у `framework.cache.pools`: окремий Redis для сесій, окремий для даних.
35 + - `cache:clear` чистить лише системний кеш (контейнер, маршрути, метадані). Дані в пулах чистить `cache:pool:clear cache.app`.
36 + - Повної сторінкової кеш-системи немає. Є HTTP-кеш: `#[Cache(public: true, maxage: 600)]` на дії, `HttpCache` як PHP reverse proxy, ESI для фрагментів. Інвалідація за тегами у Varnish, як `X-Magento-Tags`, — через FOSHttpCacheBundle.