Zend framework Zend_缓存文件消失

Zend framework Zend_缓存文件消失,zend-framework,zend-cache,Zend Framework,Zend Cache,我有一个zend缓存,它存储数据库中的一个数组。缓存可以很好地读取和更新。但实际的缓存文件似乎在一天后消失。我认为添加自动清洁系数=0可以解决这个问题,但事实似乎并非如此 $frontendOptions = array( 'caching' => true, 'cache_id_prefix' => 'mysite_blah', 'lifetime' => 14400, # 4 hours 'automatic_serialization' =

我有一个zend缓存,它存储数据库中的一个数组。缓存可以很好地读取和更新。但实际的缓存文件似乎在一天后消失。我认为添加自动清洁系数=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');
}

使用此缓存的页面不是很受欢迎,不确定这是否与此有关。。。。。有什么想法吗?

我无法解释您的文件消失的原因,我认为您的示例中缺少了一些东西,可能是删除了缓存文件。不过,我有一些笔记可以帮助你

我认为你误解了自动清洁系数参数。这不会阻止缓存过期。这只会禁止缓存前端在调用save方法时自动清理任何可能已过期的缓存

加载缓存时,仍会对其进行有效性测试,如果无效,则会忽略该缓存,并会查询数据库中的新数据。您可以在加载时将true作为第二个参数传递,以忽略有效性测试

但是,您可能应该将生存期设置为很长的时间,而不是覆盖缓存验证,因为它的存在是有原因的

此外,还可以简化此代码:

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


不需要else,因为if语句中分配了缓存中的$result。

我不能在那里添加注释吗…?呃,我的意思是缓存将在4小时后消失。呃,很抱歉,看来自动清洁因子应该能阻止这一切。。也许系统会清理缓存目录?谢谢你的解释。我将把它们付诸行动,并在修复问题后报告。思考:如果负载验证失败,是否会在此时删除缓存文件?或者,如果缓存文件仅在save中删除/更新,则自删除不必要的else块后,此问题已消失。
if(!$result = $cache->load('test_blah')) {
    // run SQL
    ...   
    $result = $my_array_from_db;
    $cache->save($result, 'test_blah');
}