314  /  382

Сессионный кеш (Local Session)

Просмотров: 219
Дата последнего изменения: 27.10.2020
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в редакциях:
Ограничений нет

Иногда возникает задача кешировать данные, которые связаны с текущим пользователем. Конечно, один из вариантов, это использовать сессию, но это не всегда подходит, так как:

  1. сессия не создана для кеширования,
  2. большое количество данных сказывается на скорость работы с сессией,
  3. возникают блокировки хитов.

Один из альтернативных вариантов, это создать кеш, который привязан к session_id(). По сути, это простая имитация сессии. С версии main 20.5.400 есть новая возможность.

Пример:

$localStorage = \Bitrix\Main\Application::getInstance()->getLocalSession('someCategory');
if (!isset($localStorage['productIds']))
{
    $localStorage->set('productIds', [1, 2, 100]);
    $localStorage->set('price', 42);
}

var_dump($localStorage->get('productIds'));

Принцип работы

Принцип работы достаточно прост: при вызове \Bitrix\Main\Application::getLocalSession($name) всегда возвращается экземпляр \Bitrix\Main\Data\LocalStorage\SessionLocalStorage. Это элемент кеша, который автоматически опирается на session_id().

При этом, если это первое обращение и данных нет, то будет создан пустой контейнер, если же в кеше были данные по $name, то контейнер будет наполнен данными.

Все SessionLocalStorage сохраняются в конце хита ядром автоматически.

Внимание! SessionLocalStorage работает на кеше, который описан в настройках .settings.php.

Примечание: Если кеш файловый, то SessionLocalStorage будет использовать для хранения $_SESSION, так как иначе возникает проблема контроля и удаления устаревших файлов, что может повлиять на работу файловой системы.

Документация по теме:

0
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии