# Windows Cache для PHP

# Введение

Windows Cache Extension для PHP — кеширующий модуль, который увеличивает скорость работы PHP-приложений на системах под управлением ОС Windows и Windows Server. Как только модуль Windows Cache Extension включается и загружается PHP-движком, приложения начинают получать преимущества модуля без изменения кода приложения.

Модуль включает 5 типов кешей. Далее рассказывается про назначение и преимущества каждого типа кеша.

- PHP Opcode Cache — PHP — скриптовый язык, который читает входящий поток данных, который содержит текст и (или) инструкции языка и выдаёт новый поток данных, обычно в HTML-формате. То есть на стороне веб-сервера PHP читает, разбирает, компилирует и запускает PHP-скрипт каждый раз, когда скрипт клиент запрашивает. Чтение, разбор и компиляция создают дополнительную нагрузку на ядра процессора и файловую систему сервера, что сказывается на конечной производительности приложения. Кеширование языком PHP байт-кода (операционного кода, или опкода) держит уже скомпилированный код в разделяемой памяти и выполняет код при очередных запросах к тому же скрипту.

  Поддержку кеширования опкодов удалили в модуле `Wincache 2.0.0`. Поэтому если требуется кеширование, лучше использовать PHP-модуль OPcache.

- File Cache — даже при включённом кешировании PHP-опкода движок PHP всё равно обращается к файлам скриптов в файловой системе. Когда PHP-скрипты хранятся в удалённом файловом общедоступном UNC-ресурсе, файловые операции значительно снижают производительность. Модуль Windows Cache Extension включает файловый кеш, который сохраняет содержимое скриптов в разделяемой памяти, что сокращает количество операций с файловой системой, которые выполняет PHP-движок.

- Resolve File Path Cache — PHP-скрипты часто включают или оперируют файлами по относительным путям. Каждый путь файла PHP-движок сначала нормализует до абсолютного пути. Когда приложение обрабатывает много PHP-файлов и обращается к файлам по относительным путям, операция разрешения абсолютных путей негативно влияет на производительность приложения. Модуль кеша Windows предоставляет кеш разрешения путей к файлам Resolve File Path, который хранит сопоставления относительных и абсолютных путей, чем уменьшает количество операций разрешения путей, которые выполняет механизм PHP.

- User Cache (доступен с версии 1.1.0) — PHP-скрипты умеют использовать преимущества кеширования в разделяемой памяти через API-интерфейс пользовательского кеша. Объекты и переменные PHP хранятся в пользовательском кеше и переиспользуются в очередных запросах. Этот тип кеша повышает производительность PHP-скриптов и разрешает обмениваться данными между PHP-процессами.

- Session Handler (доступно с версии 1.1.0) — обработчик сессий WinCache хранит данные PHP-сессии в кеше разделяемой памяти. Этот тип кеша избегает дисковых операций при чтении и записи сессионных данных, что повышает производительность, когда в PHP-сессии хранится большой объём данных.

- Установка и настройка
  - Требования
  - Установка
  - Настройка во время выполнения
  - Скрипт статистики WinCache
  - Обработчик сессий WinCache
  - Перенаправление функций WinCache
- Функции WinCache
  - wincache_fcache_fileinfo — Получает информацию о файлах, закешированных в файловом кеше
  - wincache_fcache_meminfo — Получает информацию об использовании памяти файлового кеша
  - wincache_lock — Получает эксклюзивную блокировку для данного ключа
  - wincache_ocache_fileinfo — Получает информацию о файлах, закешированных в кеше опкодов
  - wincache_ocache_meminfo — Получает информацию об использовании кеш-памяти опкодов
  - wincache_refresh_if_changed — Обновляет записи кеша для закешированных файлов
  - wincache_rplist_fileinfo — Получает информацию о разрешении кеша пути к файлу разрешения
  - wincache_rplist_meminfo — Получает информацию об использовании памяти с помощью кеша пути к файлу разрешения
  - wincache_scache_info — Получает информацию о файлах, закешированных в кеше сессии
  - wincache_scache_meminfo — Получает информацию об использовании кеш-памяти сессии
  - wincache_ucache_add — Добавляет переменную в пользовательский кеш, только если кеш ещё не содержит переменную
  - wincache_ucache_cas — Сравнивает переменную со старым значением и присваивает ей новое значение
  - wincache_ucache_clear — Удаляет всё содержимое пользовательского кеша
  - wincache_ucache_dec — Уменьшает значение, связанное с ключом
  - wincache_ucache_delete — Удаляет переменные из пользовательского кеша
  - wincache_ucache_exists — Проверяет, существует ли переменная в пользовательском кеше
  - wincache_ucache_get — Получает переменную, хранящуюся в пользовательском кеше
  - wincache_ucache_inc — Увеличивает значение, связанное с ключом
  - wincache_ucache_info — Получает информацию о данных, хранящихся в пользовательском кеше
  - wincache_ucache_meminfo — Получает информацию об использовании памяти пользовательского кеша
  - wincache_ucache_set — Добавляет или перезаписывает переменную в пользовательский кеш
  - wincache_unlock — Снимает эксклюзивную блокировку данного ключа
- Сборка для Windows
  - Пререквизиты
  - Компиляция и сборка
  - Проверка сборки

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open