Кохана, редактирование кэша не отражается в представлении?
-
13-09-2019 - |
Вопрос
Я работаю над настройкой кеширования для своего сайта, но не могу проверить, работает ли кеширование правильно или нет.У меня в контроллере есть следующее:
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.