Как использовать Cache для хранения данных
Чтобы использовать родной функционал MODx REVO для работы с кешем, достаточно знать некоторые простые функции. При этом будет задействован родной функционал очистки кеша из админке.
Применял такой подход при реализации кастомной доставки для minishop2
Итак, чтобы записать данные в кеш, а можно писать даже массивы, нужно выполнить:
$cacheName — ключ, а также название файла кеша. Этот файл появится в папке /core/cache/default/
$aDelivery — массив содержащий необходимые данные о доставке.
Если вы собираетесь хранить индивидуальные временные данные для каждого пользователя, то нужно позаботится об уникальности файлов кешей. Можно например в имя переменной добавить идентификатор сессии. Вот так:
Вот что будет в кеше
Получить данные из кеша также просто:
Данную технологию стал прмиенять, когда обнаружил проблемы с хранением данных в $_SESSION. Почему то данные то корректно устанавливались, а то нет, хотя сессия была одна и та же. Сначала думал проблема в AJAX запросах. Потом, что сессии блокируются на запись и новые данные не успевают перезаписываться, что думаю и есть на самом деле. Метод session_write_close() не решал данную проблему полностью, приходилось добавлять счетчик запросов и код вырастал до неприличных размеров. С кешем такие проблемы решились в несколько строк. Надеюсь кому-то пригодится.
Применял такой подход при реализации кастомной доставки для minishop2
Итак, чтобы записать данные в кеш, а можно писать даже массивы, нужно выполнить:
$cache = $modx->getCacheManager();
$cacheName = 'delivery_iml';
$cache->set($cacheName, $aDelivery, 7200);
где $cacheName — ключ, а также название файла кеша. Этот файл появится в папке /core/cache/default/
$aDelivery — массив содержащий необходимые данные о доставке.
Если вы собираетесь хранить индивидуальные временные данные для каждого пользователя, то нужно позаботится об уникальности файлов кешей. Можно например в имя переменной добавить идентификатор сессии. Вот так:
$cache = $modx->getCacheManager();
$cacheName = 'delivery'.session_id();
$cache->delete($cacheName);
$cache->set($cacheName, $aDelivery, 7200);
Вот что будет в кеше
Получить данные из кеша также просто:
$cache = $modx->getCacheManager();
$cacheName = 'delivery'.session_id();
$aDelivery = $cache->get($cacheName);
Данную технологию стал прмиенять, когда обнаружил проблемы с хранением данных в $_SESSION. Почему то данные то корректно устанавливались, а то нет, хотя сессия была одна и та же. Сначала думал проблема в AJAX запросах. Потом, что сессии блокируются на запись и новые данные не успевают перезаписываться, что думаю и есть на самом деле. Метод session_write_close() не решал данную проблему полностью, приходилось добавлять счетчик запросов и код вырастал до неприличных размеров. С кешем такие проблемы решились в несколько строк. Надеюсь кому-то пригодится.
Нет комментариев