我有一个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');
}
使用此缓存的页面不是很受欢迎,不确定是否与它有任何关系.....任何想法?
答案 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()
声明中指定。