НАЧАЛО >> Руководство пользователя >> Кеширование содержимого записи и SID📄 Скачать в DOCX
Раздел описывает служебный кеш, который ускоряет повторное чтение записей Record и заменяет старый путь прямого файлового кеширования через General->GetSidFile/SetSidFile.
Для записи используются два типа ключей системного кеша Cache:
| Ключ | Назначение |
|---|---|
Record_Content_<db>_<mfn> |
Содержимое записи из базы <db> с положительным MFN. |
Record_Content_<db>_SID_<sid> |
Содержимое записи, у которой еще нет положительного MFN или оно недоступно. |
Record_SidMap_<sid> |
Карта SID к базе, MFN и ключу содержимого записи. |
Значение Record_Content_* хранит массив записи в том же виде, который возвращает Record->GetAsArray(). Карта Record_SidMap_* позволяет восстановить, в какой базе и под каким MFN находится запись с заданным SID, не выполняя полный обход записей.
Database->RecRead($mfn, false) сначала проверяет Record_Content_<db>_<mfn>. Если запись найдена в кеше, объект Record восстанавливается из массива без обращения к провайдеру данных.
Если чтение выполняется с блокировкой (RecRead($mfn, true)), кеш не используется: запись должна быть получена из провайдера данных, чтобы блокировка и актуальное состояние были согласованы.
Record->GetBySid($sid, $dbname) сначала читает Record_SidMap_<sid>, затем получает связанный Record_Content_*. Если карта или содержимое отсутствуют, выполняется прежний путь восстановления:
Record с указанным SID;SidReload();i128f по I128FSID;I128F допускается резервный обход записей, после которого найденная запись снова помещается в кеш.Record->SidSave() сохраняет содержимое записи в Record_Content_* и обновляет Record_SidMap_* с временем жизни 3600 секунд.
При удалении записи Database->DeleteRec() очищает:
Record_SidMap_<sid>, если SID был найден;Record_Content_<db>_<mfn> для удаляемого MFN.Такой сброс нужен, чтобы последующее чтение не вернуло устаревшее содержимое удаленной записи.
Ключи Record_* используют общий класс Cache. В зависимости от окружения он хранит данные:
Cache.db, если APCu недоступен.Ключи кеша имеют namespace текущей инсталляции, поэтому данные разных установок не должны смешиваться при одинаковых именах баз и MFN.
SID-файлы не исчезли полностью. Они по-прежнему используются для внешних файлов, SQLite-таблиц записи, блокировок и других данных, которые физически должны храниться рядом с SID. Изменение касается горячего пути повторного чтения самой записи и карты SID к записи.