Кэширование данных для виджета
Механизм кэширования в виджете позволяет ускорить отображение при повторном получении данных, а также уменьшить нагрузку на базу данных и бизнес-логику.
Схема работы
Далее рассмотрим диаграмму последовательности обработки данных для виджетов с сохранением в prefetch
с учетом актуальности кэша:

Методы кэширования данных
Полное описание используемых методов кэширования в части, актуальной для виджетов смотрите здесь.
Prefetch.Data
Используется для кэширования методов, возвращающих Record.
Обязательные поля:
- PrefetchMethod — метод непосредственного получения данных.
Необязательные поля:
- PrefetchRenewal — период, через который обновлять кэш.
- PrefetchExpire — время, через которое кэш прекратит обновляться и будет удален.
По умолчанию время обновления кэша — 1 сутки, время жизни — 1 неделя. Значения устанавливаются только при необходимости сделать их отличными от дефолтных.
Комбинации полей PrefetchRenewal и PrefetchExpire позволяют понять, что наступило время обновления данных при обращении к кэшу. Несмотря на то, что данные из кэша устарели, их необходимо отдать и в фоне запустить обновление данных. И делать это нужно до тех пор, пока не выйдет период поддержки кэша.
В результате кэш обновляется только при обращении к данным. Предварительной подготовки данных по таймеру не вводим.
Пример использования prefetch
для хранения виджетов:
- Прикладной разработчик вызывает метод Prefetch.Data с передачей в качестве параметров PrefetchMethod и всех фильтров, необходимых для формирования данных.
- Prefetch на бэкенде сам привязывает данные к пользователю (клиенту), если в параметрах не задан параметр PrefetchSessionId.
- Если данных в кэше нет или им больше недели, то пользователь ждет их построения, после чего получает данные на интерфейсе. Если данные в кэше и им больше одного дня, то пользователь моментально получает данные. Затем данные в кэше обновляются в фоновом режиме.
Prefetch.List
Используется для кэширования методов, возвращающих RecordSet.
Обязательные поля фильтра:
- PrefetchMethod — метод непосредственного получения данных.
Настройки фильтрации:
- PrefetchSessionLiveTime — время жизни сессии при создании (TimeInterval).
Алгоритм работы
Чтобы воспользоваться механизмом кэширования, необходимо:
- Выбрать формат кэшируемого результата —
Record
илиRecordSet
.
Выбранным форматам кэшируемого результата соответствуют методы:- Prefetch.List — RecordSet.
- Prefetch.Data — Record.
- Исходя из прикладной логики, определить методику получения параметров кэширования:
- Времени жизни (PrefetchExpire/ PrefetchSessionLiveTime).
- Времени актуальности кэша (PrefetchRenewal).
- Согласно определенным параметрам вызвать методы.
Пример использования кэширования в виджете заполняемости заведения
Виджет занятости заведений отображает количество свободных/занятых столов или мест в заведении. Он состоит из двух частей:
- График (common) — общая информация о загруженности по времени.
- Отчет (detailed) — детальная информация по заполняемости столиков за каждый день.
Рассмотрим схему виджета заполняемости наглядно:

Алгоритм работы:
- Выбрали формат данных для обеих частей виджета — RecordSet.
- По данному формату кэшируемого результата используем метод Prefetch.List.
- После чего определяется алгоритм получения времени жизни кэша:
- Разделили временную шкалу по степени актуальности данных:
- Настоящее — данные активно меняются, продажи создаются или загружаются из offline. Принимаем как трое суток в прошлое по настоящий момент.
- Будущее и далекое прошлое (более трех суток) — считаем, что данные о продажах через трое суток не меняются, прогноз на будущее в виджете строится из усреднения данных в прошлом с шагом в неделю, которые, соответвено, тоже считаем неизменными.
- Разделили временную шкалу по степени актуальности данных:
Таблица методики определения времени жизни кэша:

В результате:
- За вчерашний день данные хранятся один день и обновляются.
- Детальные данные за сегодня обновляются раз в час.
- Информация по часам из графика обновляется раз в 10 минут.