Аннулирование кэша при обновлении контента - PullRequest
0 голосов
/ 28 октября 2010

я понимаю базовую концепцию кэша,

, но я не могу понять одну вещь, даже если я видел какой-то пример,

предположим,

мой первый запрос - 9 утра, теперь новая информация об обновлении поступает в кэш, затем другой тот же запрос содержимого от другого пользователя, теперь система получает содержимое из файла кэша вместо БД,

пример 1: я установил срок действия кэша на 1 час,

Сейчас время 9 утра,

9 утра: первый запрос: теперь считывание БД содержимого и сохранение в файл кэша, 9.15: второй запрос: теперь система извлекает контент из кэша, а не извлекает его из БД, 9.24 утра:Немного содержимого изменено в БД,

9:30 утра: Третий запрос: СЕЙЧАС система извлекает содержимое из БД или кэша, Как система узнает, что БД обновлена,

Это мое сомнение:

Пример 2: Если не установлено время истечения:,

Затем, когда система извлекает и сохраняет новое обновленное содержимое из базы данных в файл кэша.

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Существуют две возможные интерпретации того, что вы говорите - одна из них связана с тем, что база данных хранит результаты в памяти, которая вряд ли кешируется.

С другой стороны, существует HTTP-кеширование, и, судя по всему, (если вы говорите о HTTP-кешировании) вы совершенно не правы - при кешировании HTTP user1 запрашивает страницу, срок действия которой истекает через 3 часа, в любое время он запрашивает эту страницу в течение следующих 3 часов. Это (очевидно) отдельно для каждого пользователя - когда приходит пользователь 2, он понятия не имеет, кто такой пользователь 1 или что он имеет в его кэше, поэтому пользователь 2 запрашивает данные с вашего сервера, после чего могут быть получены будущие запросы от пользователя 2 подается из кеша user2.

HTTP также имеет метод для кэширования данных неизвестного времени жизни - каждый раз, когда пользователь запрашивает страницу, он добавляет заголовок If-Modified-Since: <Date last fetched/modified> или If-None-Match: <server-specified hash>. Затем сервер может отправить 304 Not Modified код состояния HTTP, если содержимое не изменилось и нет необходимости повторно отправлять тело файла.

2 голосов
/ 28 октября 2010

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

Это должно работать так:

$data = retrieveData($id);

retrieveData() делает это:

  • Данные для $id находятся в кеше?Хорошо, верните его.
  • Если это не так, извлеките данные из базы данных, запишите копию в кэш и верните ее.

При обновлении данных:

updateData($data);
  • updateData() сохраняет новый $data в базу данных.
  • Удаляет любую копию $data в кеше, если она есть.

Это означает, что:

  • При первом извлечении записи из базы данных кэш отсутствует.Как только вы получите его, хотя он будет кеширован.
  • В следующий раз та же запись может быть взята из кэша.
  • Когда запись обновлена, кеш удаляется.
  • При следующем запросе записи кеша не будет, поэтому он будет извлечен из базы данных, а кеш обновлен снова.
  • Промыть, повторить.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...