[Закрыть]
 
popoff.donetsk.ua
Задача жизни не в том, чтобы быть на стороне большинства,а в том, чтобы жить согласно с внутренним, сознаваемым тобою законом. /Марк Аврелий/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Статьи - Программирование - Модули - cms - cms.cache
Я это делаю
Персональное меню
Голосование
Деньги, либо любимое занятие? Постоянный адрес этого вопроса
Деньги, но неинтересная работа и невозможность уделить время семье
Интересная работа, возможность саморазвиваться, но нищенский заработок
Ваш возраст (не обязательно)
Почему? (не обязательно)

Голосование закрыто.

Поиск по сайту
Реклама
Гинеколог, стоматолог, психотерапевт в Донецке
Статистика

cms.cache

Постоянный адрес статьи

cms.cache -- Модуль для кеширования результатов работы скриптов

Основные возможности

  • Может использоваться для кеширования как выводимого в браузер контента так и для кеширования результатов вычислений.

  • Рекурсивное кеширование (когда редко изменяемая часть часто изменяемого кешируемого данного тоже кешируется).

  • Двухуровневое вычисление ключа (уникального идентификатора для кешируемого данного): первичный ключ известен до вычисления кешируемого данного, вторичный ключ определяется в процессе вычисления кешируемого данного. Например, во время вычиления кешируемого данного может обнаружиться, что оно зависит от языка просмотра, от каких-то привилегий текущего пользователя или других данных, все из которых сложно или не удобно перечислить до вычисления кешируемого данного.

  • Программно указываются имена объектов, от которых зависит кешируемое данное. При изменении любого из этих объектов данное удаляется из кеша. Именем объекта может быть, например, имя модуля (объект изменятся при любом изменении в этом модуле), или ссылка на строку таблицы (объект изменяется при изменении этой строки таблицы).

  • При записи в кеш выполняется 5-6 запросов: 1 - проверка на наличие данного в кеше + чтение первичного ключа (перед вычислением; остальные запросы выполняются после вычисления кешируемого данного); 2 - блокировка таблиц; 3 - запись вторичного ключа и кешируемого данного; 4 - запись имен объектов, от которых зависит кешируемое данное (выполняется, если есть зависимости); 5 - запись запись первичного ключа; 6 - разблокировка таблиц.

  • При очистке кеша выполняется 5 sql-запросов (1 - блокировка; 2 - выбор всех зависящих от указанных объектов ключей; 3 - очистка таблицы зависимостей; 4 - очистка таблицы с кешируемым данным; 5 - разблокировка)

  • При удачном чтении из кеша выполняется 2 sql-запроса (1 - чтение первичного ключа, 2 - чтение собственно данного). Не чаще одного раза в сутки для каждого закешированного данного выполняется дополнительно 2 sql-запроса для установки даты последнего обращения к этому данному (отдельно для первичного и отдельно для вторичного ключа). Данное, к которому слишком долго не было обращения, удаляется из кеша.

  • Содержимое кеша сжимается, что позволяет сэкономить дисковое пространство, занимаемое кешем.

Терминология

  1. Кешируемое данное - конкретный результат работы конкретного скрипта с конкретными исходными данными.

  2. Элемент кеша - кешируемое данное, записанное в стек.

  3. Первичный ключ - строка, в которой содержится основная часть информации, от которой зависит кешируемое данное. Обычно эта строка получается конкатенацией имени скрипта (или имени функции) и всех тех данных, которые являются исходными для генерации кешируемого данного. Одному первичному ключу может соответсовать несколько элементов кеша.

  4. Вторичный ключ - образуется путем добавления к первичному ключу информации, которую затруднительно или не удобно указывать при формировании первичного ключа. Элемент кеша уникально определяется вторичным ключем.

  5. Объект для построения вторичного ключа - имя динамического объекта, значение которого должно быть добавлено к первичному ключу для получения вторичного ключа. Возможные имена этих объектов перечислены в описании функции cms_cache_key.

  6. Объект зависимости - объект, при изменении которого кешируемое данное должно быть перегенерировано. Перегенерация обычно заключается в том, что соответствующий элемент кеша просто удаляется из кеша в момент изменения этого объекта. Объект зависимости задается именем. В качестве имени может использоваться любая строка, не содержащая в себе пробелов. Например, если кешируемое данное представляет собой результат интерпретации некоторого сообщения из форума, то в качестве имени объекта зависимости можно было бы взять строку типа forum.message.12345, где 12345 - идентификатор этого сообщения.

Рисунок. Пример использования модуля для кеширования

<?php
  $q
='my string';

  echo
md5^1048576('.$q.')=;

  
//Проверить существование элемента в кеше.
  
$c=cms_cache_start(
    
'md5^1024'.
    
$q);
  if(
$c)
  {
//Если элемент существует, то сразу выводи его значение
    
echo $c;
    return;
  }

  
//Если где-нибудь произвести вызов функции
  //  
cms_cache_clear('example.md5');
  //то этот элемент будет удален из кеша
  
cms_cache_dependency('example.md5');

  
//Если не существует, то генерируем значение
  //Любые долгие вычисления
  
for($i=0;$i<1048576;$i++)
    
$q=md5($q);

  
//И записываем его в кеш.
  
cms_cache_end($q);

  echo
$q;
?>

Содержание

Проверить, происходит ли сейчас генерация данного, которое будет записано в кеш
Очистить кеш
Добавить объект, от которого зависит генерируемое данное
Завершить процесс генерации кешируемого данного и записать новый элемент в кеш
Добавить динамический объект, значение которого следует учитывать при вычислении вторичного ключа
Добавить имя привилегии, от наличия которой у текущего пользователя зависит генерируемое данное
Проверить наличие данного в кеше и начать процесс генерации кешируемого данного

Смотрите также

Таблицы, используемые модулем кеширования: cms_cache_data, cms_cache_dependency, cms_cache_key

Константы, определяющие режим работы модуля кеширования: CMS_CACHE_DISABLE, CMS_CACHE_DISABLE_DEBUG, CMS_CACHE_EXPIRE_DEFAULT, CMS_CACHE_EXPIRE_DEFAULT, CMS_CACHE_EXPIRE_NOACCESS, CMS_CACHE_UPDATE_LAST.

Последняя модификация: 09.02.07 20:45

Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>