Новое в Symfony 4.4: Улучшения кэша

Возможность использовать URL DSN в адаптерах PDO

Адаптер кэша PDO позволяет настроить соединение несколькими способами: с помощью объекта PHP PDO, соединения Doctrine DBAL или имени источника данных (DSN). В Symfony 4.4 также будет возможно использовать URL–адрес DSN. Это означает, например, что вы можете повторно использовать значение DATABASE_URL, если хотите:

# config/packages/cache.yaml
framework:
    cache:
        pools:
            cache.app:
                adapter: cache.adapter.pdo
                provider: app.my_pdo_provider

services:
    app.my_pdo_provider:
        factory: ['Symfony\Component\Cache\Adapter\PdoAdapter', 'createConnection']
        arguments:
            - '%env(DATABASE_URL)%'

Добавлены новые маршаллеры

В вычислительной технике маршаллер преобразует представление объекта в памяти в формат данных, подходящий для хранения или передачи. В Symfony 4.4 добавили два маршаллера в компонент Cache.

Первый — это TagAwareMarshaller, который оптимизирует хранение данных при использовании адаптеров кеша с поддержкой тегов. Этот маршаллер включается автоматически, поэтому вам не нужно ничего делать.

Второй — это DeflateMarshaller, который сжимает содержимое перед кэшированием для экономии места (и распаковывает их автоматически позже, поэтому весь процесс прозрачен для пользователя).

Этот маршаллер не включен по умолчанию, потому что это может нарушить пулы кэша, которые совместно используются различными приложениями. Вы можете включить его при помощи декоратора:

# config/services.yaml
services:
    Symfony\Component\Cache\Marshaller\DeflateMarshaller:
        decorates: cache.default_marshaller
        arguments: ['@Symfony\Component\Cache\Marshaller\DeflateMarshaller.inner']

Быстрое удаление элементов кэша

Адаптеры кэша на основе файловой системы используют вложенную структуру каталогов для хранения своего содержимого. В Symfony 4.4 ввели некоторые оптимизации, чтобы намного быстрее перемещаться по структуре каталогов при удалении элементов.

Профилирование Blackfire показало значительное улучшение производительности (до 100%) благодаря удалению тысяч вызовов функций, связанных с RecursiveDirectoryIterator.

Упрощенная настройка пулов цепочки кеша

В Symfony 4.4 определение цепочек пулов кэша будет намного проще:

# config/packages/cache.yaml
framework:
    cache:
        pools:
            my_chained_pool:
                default_lifetime: 12
                adapters:
                  - cache.adapter.array
                  - cache.adapter.filesystem
                  - { name: cache.adapter.redis, provider: 'redis://foo' }