Кохана, редактирование кэша не отражается в представлении?

StackOverflow https://stackoverflow.com/questions/1271630

Вопрос

Я работаю над настройкой кеширования для своего сайта, но не могу проверить, работает ли кеширование правильно или нет.У меня в контроллере есть следующее:

public function read($id, $slug = null)
{
  $this->cache = Cache::instance();
  $story = $this->cache->get("story".$id);

  if (!$story) {
    $story_model = new Story_Model;
    $story = $story_model->get_story($id);
    if (!$story) throw new Kohana_404_Exception();
    $this->cache->set("story".$id, $story);
  }

  $this->template->content = new View('story');
  $this->template->title = htmlspecialchars($story->title);
  $this->template->content->story = $story;
}

Это работает отлично, я даже могу убедиться, что кеш найден, и проверка if() не вводится после установки кеша.Меня смущает следующее: почему, когда я редактирую файл кеша, изменения не отражаются в представлении?Например, мой кеш выглядит так:

O:8:"stdClass":11:{
  s:2:"id";s:3:"636";
  s:5:"title";s:45:"Some Article Title";
  s:4:"link";s:50:"http://www.somesite.com";
  s:8:"category";s:2:"12";
  s:4:"user";s:1:"5";
  s:4:"slug";s:45:"some-article-title";
  s:7:"pubdate";s:19:"2009-08-05 03:57:50";
  s:6:"sticky";s:1:"0";
  s:7:"summary";N;
  s:13:"categorytitle";s:13:"International";
  s:8:"username";s:7:"usernameHere";
}

Если бы я изменил title установите значение «Некоторый заголовок статьи, часть 2» и обновите свое представление, я все еще вижу старое название заголовка, а изменения, которые я внес в файл кэша, исчезают.

Я делаю это неправильно?Как я могу проверить, обращаются ли к моим файлам кэша вместо моей базы данных?Содержимое моего файла конфигурации следующее:

$config['default'] = array
(
  'driver'   => 'file',
  'params'   => APPPATH.'cache',
  'lifetime' => 1800,
  'requests' => 1000
);
Это было полезно?

Решение

Сериализованный объект PHP накладывает ограничения на значения.Посмотрите на следующую строку:

s:5:"title";s:45:"Some Article Title";

А s:5 означает, что следующее значение будет состоять из пяти символов "T-i-t-l-e".Всего пять.Следующее значение s:45 должно состоять из сорока пяти символов.Вы изменили текст с прежнего на "Some Article Title" для публикации здесь, но в оригинале было всего 45 символов.

Добавление дополнительных символов или вычитание символов нарушит связь между длиной строки значения и привязанным к нему целым числом.Если s:3, ваша строка должна иметь длину три символа.

Вместо того, чтобы добавлять/вычитать значение, просто измените пару символов.Изменять "Title" к "Ninja" а затем обновите страницу.

Другие советы

Вы захотите редактировать свои данные в исходном хранилище данных и относиться к кэшированию как к черному ящику.

Если вы используете базу данных, приобретите хороший менеджер баз данных, чтобы вы могли легко редактировать значения.я использую ДБВизуализатор...не спрашивай меня, почему.

При использовании драйвера файлового кэша я удалю все в разделе «Приложение/кэш», чтобы очистить кеш и протестировать код кеширования.

Единственный раз, когда я редактировал файлы кэша, это когда я действительно писал систему кэширования для замены файла или драйверов memcached.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top