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необходимо для корректной работы.
