2011-09-12 42 views
-2

ヘッダーの状態として、正しいキャッシングが理解できているかどうかを知っていれば、どのようにすればよいかわかります。同じPOSTパラメータが同じ場合に、キャッシュからフェッチして出力する

詳細:

は、PHPスクリプトを順番にAPIと出力結果を呼び出して、私は同じPOSTパラメータの組み合わせが2回呼び出された場合ように、これらの結果をキャッシュしたいと思い、いくつかのPOSTパラメータと呼ばれていますキャッシュからフェッチし、別のAPI呼び出しを行わないようにします。

私の限られた知識の中で私はセッションアレイソリューションをこのように考えることができます。それはプレスタスタの観点から賛成ですか?

+1

正確に何をお探しですか?どのような種類のデータをセッションで保持しますか?あなたが維持したい測定されたパフォーマンスは何ですか?キャッシュはどのようにあなたに利益をもたらすでしょうか?これは建設的な質問ではなく、意見を求めます。あなたが尋ねたい厳しい事実がある場合、おそらくあなたはポイント・ツー・ポイントの回答を得るでしょう。 – Shef

+0

コードを表示してください。 – hakre

答えて

0

パラメータの組み合わせについて:キャッシュを保存(および後で取得)するキーが入力パラメータで構成されているため、2人のユーザーが同じ結果を表示できるかどうかを確認してください。明白な理由からキーが一意である必要があるため、意図した以外の入力変数のセットに対してキャッシュされたデータを表示する必要はありません。

質問は、あなたは鍵が

$cache_key = 'search_external_api_user_53'.implode(',', $_POST); 

または

$cache_key = 'search_external_api'.implode(',', $_POST); 

十分なものであることする必要がありますか?

脚注:標準セッション($_SESSION)を共有することはできません。代わりに、ファイルやメモリ(APCやmemcachedなど)にデータを保存することができます。ファイルに保存するのは簡単です:

function save_cache_in_file($cache_key, $content) { 
    $cache_key = md5($cache_key); 
    file_put_contents('/tmp/'.$cache_key, serialize($content); 
} 
function get_cache_from_file($cache_key) { 
    $cache_key = md5($cache_key); 
    if(!file_exists('/tmp/'.$cache_key)) { 
     return false; 
    } 
    return unserialize(file_get_contents('/tmp/'.$cache_key)); 
} 
// usage 
$cache_key = 'my_search'.implode(',', $_POST); 
if(!$data_from_external_service = get_cache_from_file($cache_key)) { 
    $data_from_external_service = getDataFromElsewhere(); 
    save_cache_in_file($cache_key, $data_from_external_service); 
} 
// here, $data_from_external_service is always available and cached 
+0

'$ cache_key = 'search_external_api'.implode('、 '、$ _POST);'で十分であり、キャッシュファイルのスクリプトは良い解決策です – Joseph

+0

@Joseph:今、あなたは鍵を知っていますが、から選択する(そして、これは私が知っている最も単純なものです)。インスピレーションのために、例えば['Zend_Cache'](http://framework.zend.com/manual/en/zend.cache.backends.html)について自由に読んでください。そして私の答えには大きな+1があります:あなたはキャッシュがどれくらい長く持続するか=それを無効にする時期を言う必要があります。それは本当に重要です。 – chelmertz

関連する問題