Адаптер кеша Filesystem

Дата обновления перевода 2021-12-25

Адаптер кеша Filesystem

Этот адаптер предоставляет улучшенную производительность приложения для тех, кто не может установить инструменты вроде APCu или Redis в своём окружении. Он хранит срок окончания действия объекта кеша и содержане в виде обычных файлов в коллекции каталогов в локально смонтированной файловой системе.

Tip

Производительность этого адаптера может быть значительно увеличена с использованием временной файловой системы в оперативной памяти, вроде tmpfs на Linux, или одного из множества других доступных решений RAM-диска.

FilesystemAdapter можно опционально предоставить пространство имён, время жизни кеша по умолчаию и путь корня кеша в качестве параметров конструктора:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use Symfony\Component\Cache\Adapter\FilesystemAdapter;

$cache = new FilesystemAdapter(

    // строка, используемая в качестве подкаталога корневого каталога кеша, где
    // будут храниться объекты кеша
    $namespace = '',

    // время жизни по умолчанию (в секундах) для объектов кеша, которые не определяют
    // собственное время жизни, со значением 0, вызывающим бесконечное хранение объектов
    // (т.е. пока не будут удалены файлы)
    $defaultLifetime = 0,

    // главный каталог кеша (приложению нужны права чтения и редактирования в нём)
    // если он не указан, то создаётся каталог внутри временного каталога системы
    $directory = null
);

Caution

Перегрузка IO файловой системы часто делает этот адаптер одним из более медленных вариантов. Если пропускная способность является наиболее важной, то рекомендуется использовать адаптеры оперативной памяти (Apcu, Memcached, и Redis ) или адаптеры DB (Doctrine и PDO).

Note

Начиная с Symfony 3.4, этот адаптер реализует PruneableInterface, позволяя ручное отсечение просроченных объектов кеша, путём вызова его метода prune().

Работа с тегами

Для того, чтобы использовать инвалидацию, основанную на тегах, вы можете обернуть ваш адатер в TagAwareAdapter, но часто более интересно использовать соответствующий FilesystemTagAwareAdapter. Так как логика инвалидации тегов реализуются с помоощью ссылок в файловой системе, этот адаптер предлагает более читаемую производительность при использовании инвалидации, основанной на тегах:

1
2
3
use Symfony\Component\Cache\Adapter\FilesystemTagAwareAdapter;

$cache = new FilesystemTagAwareAdapter();