Кэш объектов в 1С состоит из двух частей - "Обычный кэш" и "Транзакционный кэш".
Обычный кэш.
Уникальным идентификатором для кэша является ссылка на объект базы данных. Поэтому в кэше хранится или объект целиком со всеми своими данными, или представление объекта.
Если запросить у кэша представление объекта и там оно есть, то это представление будет взято из кэша. Если в кэше не представление объекта, а весь объект, то представление будет сформировано на основе данных объекта, хранящегося в кэше. Если же ни того, ни другого в кэше нет, то в кэш из базы данных будут считаны только поля, необходимые для запроса.
Если запросить у кэша реквизит объекта, и в кэше есть этот объект, то без проблем - кэш сразу вернёт этот реквизит. Если в кэше только представление объекта, то кэш не будет и пытаться искать в нём нужный реквизит, а просто удалит его, скачает из базы данных весь объет и будет выковыривать реквизит из него.
Обычный кэш удаляет у себя данные ещё в следующих случаях:
1. Поступают новые данные, а их негде хранить - закончилось свободное место. Тогда самые старые данные удаляются.
2. Если при повторном обращении к данным, уже находящимся в кэше прошло более 20 секунд, кэш сверяет эти данные с базой данных, и если в базе данных они изменились, то удаляет их у себя и скачивает взамен из базы данных их новую версию.
3. Прошло более 20 минут после того, как данные были помещены в кэш.
Транзакционный кэш.
Транзакция - это неделимая последовательность операций с данными, переводящая базу данных из одного целостного состояния в другое. То есть, если какая-либо операция не просто обращается к базе данных, а производит в ней изменения, то она упаковывается вместе со всеми сопутствующими операциями в транзакцию. И если хоть одну операцию из транзакции нельзя выполнить, то все операции из этой транзакции отменяются и база данных возвращается в состояние, в котором она была до начала транзакции (это называется откат транзакции - Rollback).
В отличие от обычного кэша, транзакционный кэш не проверят данные на валидность, если прошло более 20 секунд от последнего обращения, а просто блокирует изменение в базе тех данных, которыые он взял из базы данных, пока транзакция не завершится.
Транзакционный кэш удаляет у себя данные в следующих случаях:
1. Поступают новые данные, а их негде хранить - закончилось свободное место. Тогда самые старые данные удаляются.
2. Транзакция завершилась неуспешно.
3. Транзакция завершилась успешно. Тогда данные переносятся в обычный кэш.