Обычный кэш
Если при обращении к обычному кэшу требуемых данных в нем нет, то выполняется чтение данных объекта из базы данных и сохранение их в кэше. Уникальным идентификатором для кэша, в данном случае, будет являться ссылка на объект базы данных. Поэтому данные каждого считанного [554] объекта могут существовать в кэше в одном из двух видов: либо все данные объекта, либо представление объекта.
Таким образом, если мы обратимся к кэшу для получения представления объекта, и в кэше есть информация для нашей ссылки, данные будут взяты из кэша (если в кэше весь объект, нужное представление будет получено из данных объекта). Если в кэше нет информации для нашей ссылки – из базы данных в кэш будут считаны только поля, необходимые для формирования представления объекта.
Если мы обратимся к кэшу для получения реквизита объекта, и в кэше есть информация для нашей ссылки, дальнейшие действия будут зависеть от того, что находится в кэше. Если в кэше весь объект – значение реквизита будет получено из кэша. Если в кэше представление объекта – оно будет удалено из кэша и в кэш будут считаны все данные объекта. Если же при получении реквизита объекта в кэше нет информации для нашей ссылки – из базы данных будут считаны все поля объекта.
Считанные данные будут находиться в кэше до тех пор, пока не наступит одно из трех событий:
· | считанные данные будут вытеснены из кэша другими считанными данными других объектов (переполнение кэша), |
· | при очередном обращении к кэшу окажется, что считанные данные были изменены в базе данных, |
· | закончится интервал времени в 20 минут, |
· | данные будут изменены в базе данных. |
Все считанные данные помещаются в последовательную очередь и, поскольку объем кэша ограничен, наиболее старые данные будут вытесняться из кэша последними считанными данными.
При повторном обращении к кэшу за данными уже считанного объекта будет анализироваться интервал времени, прошедший с момента появления данных в кэше.
Если обращение происходит в пределах 20 секунд после поступления данных в кэш, данные считаются верными (валидными). Если интервал превысил 20 секунд, будет выполняться проверка на то, что версия данных, хранящихся в кэше, соответствует версии данных, находящихся в базе данных. В случае если окажется, что версии данных не совпадают (т.е. произошло изменение данных в базе данных), данные, находящиеся в кэше будут удалены из него и [555] выполнено повторное считывание данных из базы данных. Начиная с этого момента начнется отсчет следующего 20-ти секундного интервала валидности этих данных.
Кроме всех вышеперечисленных событий, считанные данные будут удалены из кэша по истечении 20 минут после их последнего считывания из базы данных.
Таким образом при последовательном выполнении двух операторов (где "Номенклатура" – это ссылка на объект справочника):
В = Номенклатура.ВидНоменклатуры;