我的工作设置缓存为我的网站,但我有困难的测试缓存是否工作正常与否。我有以下在我的控制器:

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;
}

这工作就好了,我甚至可以验证缓存被发现,并且缓存被设置后,没有被进入,如果()检查。我的困惑是这样,为什么当我编辑缓存文件的更改不会反映在视图?例如,我的缓存是这样的:

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应该有45个字符。你改变了从不管它是"Some Article Title"张贴在这里的文本,但在它原来有45个字符总。

添加更多的字符,或减去字符是要打破值的字符串长度之间的关系,和INT-VAL绑它。如果s:3,你的字符串应该是三个字符长。

而不是加法/减法/从值,只要改变几个字符。更改"Title""Ninja"再刷新页面。

其他提示

您会希望在原来的数据存储编辑您的数据和治疗缓存就像一个黑盒子。

如果你使用一个数据库,获得了良好的数据库管理器让您可以轻松地编辑值。我使用 DBVisualizer中 ......不要问我为什么。

当使用该文件高速驱动,我将删除下应用/缓存一切以清除缓存并测试缓存代码。

我唯一一次将编辑缓存文件,如果是我在实际写入缓存系统,以替换文件或memcached的驱动程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top