Yii2. Особенности использования keyPrefix для FileCache
Недавно, работая с относительно крупным проектом, наткнулся на некоторую заторможенность при работе файлового. Она проявлялась не сразу, а когда приложение проработало определенное время.
Я всегда считал (и считаю), что задание префикса ключей для КЭШа является хорошим тоном. Это действительно так при использовании MemCache, т.к. это предотвращает коллизию ключей. Но при использовании FileCache дело обстоит иначе.
По умолчанию (с пустым значением префикса) файловый КЭШ создает кучу поддиректорий по первым двум символам названия файла КЭШа. Например, для файла fa7f40216dbf8ad9b4b5511aa11e109a.bin
будет создана директория fa
внутри /path/to/site/runtime/cache
. При использовании keyPrefix
отличного от пустого, абсолютно все файлы помещаются в одну директорию. Например, при использовании keyPrefix = 'test'
, файл fa7f40216dbf8ad9b4b5511aa11e109a.bin
сохранится в папку /path/to/site/runtime/cache/test
. В последнем случае в одной директории хранится огромное количество файлов и, в силу ограничений файловой системы, проявляется падение производительности. Это один из случаев, когда КЭШирование данных может понизить скорость работы сайта.
Выводы:
- Если вы используете
FileCache
, на сервере несколько сайтов и каждый из них расположен в разных файлах директориях, тоkeyPrefix
лучше оставить пустым. - Если вы используете
FileCache
, на сервере несколько сайтов и они имеют один инстанс, то необходимо задать для них уникальные префиксы, а лучше задать разныеcachePath
для сайтов и не задавать префиксы. - Если вы используете
MemCache
и на сервере несколько сайтов, то использованиеkeyPrefix
необходимо для корректной работы.