Zend_Cache缓存文件消失

时间:2011-04-06 07:51:22

标签: zend-framework zend-cache

我有一个zend缓存,它存储来自db的数组。缓存可以读取&更新很好。但实际缓存文件似乎在一天左右后消失。我认为添加automatic_cleaning_factor = 0可以解决这个问题,但情况似乎并非如此。

$frontendOptions = array(
    'caching' => true,
    'cache_id_prefix' => 'mysite_blah',
    'lifetime' => 14400, # 4 hours
    'automatic_serialization' => true,
    'automatic_cleaning_factor' => 0,
);
$backendOptions = array(
    'cache_dir' => "{$_SERVER['DOCUMENT_ROOT']}/../../cache/zend_cache/"
);
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);

if(!$result = $cache->load('test_blah'))
{
    // run SQL
    ...    
    $cache->save($my_array_from_db, 'test_blah');
}
else
{
     $result = $cache->load('test_blah');
}

使用此缓存的页面不是很受欢迎,不确定是否与它有任何关系.....任何想法?

1 个答案:

答案 0 :(得分:0)

我无法解释为什么你的文件正在消失,我认为你的样本中可能缺少可能删除缓存文件的内容。但是,我可以提供一些可能会帮助你的笔记......

我认为你错误地解释了automatic_cleaning_factor参数。这不会禁用缓存过期。这只会禁用缓存前端,以便在您调用save()方法时自动清除可能已过期的任何缓存。

当你load()你的缓存时,它仍然会被测试有效性,如果无效,它会被忽略,你的数据库将被查询新数据。您可以将true作为load()上的第二个参数传递,以忽略有效性测试。

但是你可能只需将lifetime设置为很长时间而不是覆盖缓存验证,因为它存在原因。

此外,此代码可以简化:

if(!$result = $cache->load('test_blah')) {
    // run SQL
    ...    
    $cache->save($my_array_from_db, 'test_blah');
} else {
     $result = $cache->load('test_blah');
}

要:

if(!$result = $cache->load('test_blah')) {
    // run SQL
    ...   
    $result = $my_array_from_db;
    $cache->save($result, 'test_blah');
}

不需要else,因为您的缓存中$result已在if()声明中指定。

相关问题