Советы PHP-разработчика

Блог содержащий короткие заметки касающиеся программирования для web.

Yii2. Особенности использования keyPrefix для FileCache

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 необходимо для корректной работы.
  • 2015-11-04 21:11:19