Кеш-файл Zend_Cache исчезает - PullRequest
       25

Кеш-файл Zend_Cache исчезает

0 голосов
/ 06 апреля 2011

У меня есть кэш Zend, в котором хранится массив из БД.Кеш можно читать и обновлять нормально.Но фактический файл кэша, кажется, исчезает через день или около того.Я думал, что добавление 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 голосов
/ 08 апреля 2011

Я не могу объяснить, почему ваш файл исчезает, я думаю, что чего-то не хватает в вашем образце, который, вероятно, удаляет файл кэша.Однако у меня может быть несколько заметок, которые могут вам помочь ...

Я думаю, что вы неправильно интерпретируете параметр 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().

...