13

現在、データをキャッシュする方法を 2 つしか知りません (私は PHP を使用していますが、ほとんどの言語に同じことが当てはまると思います)。

  1. キャッシュをファイルに保存する
  2. キャッシュを大きな DB フィールドに保存する

他の (おそらくもっと良い) キャッシュの方法はありますか、それとも本当に単純ですか?

4

4 に答える 4

2

キャッシュしたいものをより正確に明示したいかもしれません。キャッシュするこのすべての機会があります。

  • データをキャッシュするデータベースにアクセスして、最初に RDBMS を正しく調整し、次にレイヤーを使用して、同じデータに対する複数のクエリを検出する決定を委任します (たとえば、 AdoDBを使用)。
  • コード内のループから計算を抽出して、同じ値を複数回計算しないようにします。ここで 3 番目の方法: ユーザーのセッションに結果を保存します。
  • APC Cacheなどの拡張機能を使用して PHP コードをプリコンパイルします。この方法では、リクエストごとに同じ PHP コードをコンパイルする必要はありません。
  • ページがユーザーに送信され、適切な META タグが設定されていることを確認します (世界のために良いことを行い、少なくとも絶対に必要な ETL を使用しないでください)。または、動的ページを完全に静的にする (.html ページを生成するバッチ プロセスを使用する)。またはSquidのようなプロキシ キャッシュを使用します。
  • プリフェッチとは、ユーザーが自分の方向を向いていないときに何かを行うだけで、ユーザー エクスペリエンスを向上させるあらゆる機会を指します。たとえば、IMG タグを HTML ファイルにプリロードする、プリフェクト用に RDBMS をチューニングする、データベースに複雑な計算を格納する結果をプリコンピューティングする、などです。

私の経験から、キャッシングについて話し始める前に、コードを大幅に改善できると確信しています。たとえば、サイトのナビゲーションがどの程度構造化されているか、ユーザー エクスペリエンスをどの程度適切に制御しているかを考えてみてください。次に、 XDebugなどのツールを使用してコードをチェックします。

また、SQL クエリが適切に作成されているか、テーブルのインデックスが適切に作成されているかを確認してください。次に、コードをもう一度チェックして、「何度も読み取り、1 回だけ書き込む」というルールを適用する機会を探します。

YSlowのような単純なツールを使用して、他の単純な改善点を示唆します。コードをもう一度チェックして、(JavaScript 経由で) ブラウザーにロジックを配置する機会を探します。

于 2008-08-07T00:46:58.467 に答える
1

はるかに効率的なメモリにキャッシュすることもできます。memcachedを試してください。

于 2008-08-06T22:23:13.203 に答える
0

memcached のセコンディングは、単純なことをうまく実行し、必要に応じて配布やすべてのジャズを行うことができます

于 2008-08-07T00:48:53.300 に答える
0

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 ファイルにいくつか追加の正規表現を使用すると、おそらくクエリ文字列リクエストのキャッシュも開始できますが、それは読者の演習として残しておきます :)

于 2008-09-15T21:28:30.150 に答える