現在、データをキャッシュする方法を 2 つしか知りません (私は PHP を使用していますが、ほとんどの言語に同じことが当てはまると思います)。
- キャッシュをファイルに保存する
- キャッシュを大きな DB フィールドに保存する
他の (おそらくもっと良い) キャッシュの方法はありますか、それとも本当に単純ですか?
現在、データをキャッシュする方法を 2 つしか知りません (私は PHP を使用していますが、ほとんどの言語に同じことが当てはまると思います)。
他の (おそらくもっと良い) キャッシュの方法はありますか、それとも本当に単純ですか?
キャッシュしたいものをより正確に明示したいかもしれません。キャッシュするこのすべての機会があります。
私の経験から、キャッシングについて話し始める前に、コードを大幅に改善できると確信しています。たとえば、サイトのナビゲーションがどの程度構造化されているか、ユーザー エクスペリエンスをどの程度適切に制御しているかを考えてみてください。次に、 XDebugなどのツールを使用してコードをチェックします。
また、SQL クエリが適切に作成されているか、テーブルのインデックスが適切に作成されているかを確認してください。次に、コードをもう一度チェックして、「何度も読み取り、1 回だけ書き込む」というルールを適用する機会を探します。
YSlowのような単純なツールを使用して、他の単純な改善点を示唆します。コードをもう一度チェックして、(JavaScript 経由で) ブラウザーにロジックを配置する機会を探します。
はるかに効率的なメモリにキャッシュすることもできます。memcachedを試してください。
memcached のセコンディングは、単純なことをうまく実行し、必要に応じて配布やすべてのジャズを行うことができます
Apache を使用している場合は、mod_rewrite を使用して Web ページを静的にキャッシュできます。PHP を使用していて、"/somepage.php" に対するリクエストがあるとします。.htaccess ファイルに次のように記述します。
RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead
キャッシュが空になった場合、リクエストは通常どおり php スクリプトによって処理されるため、php スクリプトで結果の html をキャッシュに保存するだけです。これを行う最も簡単な方法は、別の htaccess ルールを使用して、いくつかの php ファイルをすべての php リクエストの先頭に末尾に追加することです (アプリケーションによっては、これが良いアイデアである場合とそうでない場合があります)。
php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"
次に、次のようにします。
pre_cache.php:
ob_start();
post_cache.php:
$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
file_put_contents("static_cache/" + __FILE__, $result);
}
.htaccess ファイルにいくつか追加の正規表現を使用すると、おそらくクエリ文字列リクエストのキャッシュも開始できますが、それは読者の演習として残しておきます :)