0

データベースから配列を格納する zend キャッシュがあります。キャッシュは正常に読み取りおよび更新できます。しかし、実際のキャッシュ ファイルは 1 日ほどで消えてしまうようです。追加すれば解決すると思って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');
}

このキャッシュを使用するページはあまり人気がありません。それが関係しているかどうかはわかりません..何かアイデアはありますか?

4

1 に答える 1

0

あなたのファイルが消えている理由を説明することはできません。おそらくキャッシュ ファイルを削除しているサンプルに何かが欠けていると思います。しかし、私はあなたを助けるかもしれないいくつかのメモを持っていることができます...

automatic_cleaning_factorパラメータを誤解していると思います。これにより、キャッシュの期限切れが無効になるわけではありません。これは、メソッドを呼び出したときに有効期限が切れた可能性のあるキャッシュをフロントエンドが自動的にクリーニングするのを無効にするだけです。save()

キャッシュをload()使用すると、有効性がテストされ、無効な場合は無視され、データベースに新しいデータがクエリされます。trueの 2 番目のパラメーターとして渡して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');
}

from your cache がステートメントで割り当てられているため、elseは必要ありません。$resultif()

于 2011-04-08T00:46:19.090 に答える