ホームページ >バックエンド開発 >PHPチュートリアル >PHPに適したキャッシュはありますか?
たとえば、index.php ホームページをキャッシュして 10 分ごとに更新したい場合、キャッシュをどのように作成すればよいでしょうか?
以前は .net を使用していましたが、現在は PHP に切り替えています。PHP の書き方がわかりません
を作成する方法を探しています。
は、index.html を時間内に生成しません。
は、他の人が html にアクセスしたときに 10 分ごとにインデックスを更新します。 5分ごとにデータを更新
書き方! ! !
最高のものを生み出しましょう! !
すべて英語
memcached
.net で行うことは php で行うことと同じです
方言が違うだけです
memcached
このシナリオでは、memcached のキャッシュは非常に簡単です。トラフィック量は言うまでもなく、純粋に静的なページを生成するたびに、最初に PHP をロードし、それを memcached サーバーから読み取ってからクライアントに返す必要があり、非常に非効率的です。
推奨される方法は、index.html 生成ファイルをキャッシュし、スクリプトを実行して定期的に更新することです。
キャッシュしたい場合は、まずキャッシュしたい理由とキャッシュしたいものを知る必要があります...
上記のすべての答えはある程度実現可能ですが、キーは何をしたいかによって異なります...
ページ全体をキャッシュするには、静的ファイルを自分で作成するだけです。 ob_start()、ob_get_contents()、flush() または ob_flush()、これら 4 つの関数で十分です。
このページをリクエストするたびに確認してください。この静的ファイルが存在する場合、または現在時刻 (作成時間 >= 10 分) である場合は、上記のメソッドを再使用して静的ページを生成します。それ以外の場合は、静的ファイルが直接読み取られてブラウザに返されます。
ページ全体をキャッシュする必要がある場合は、Memcached または Redis が最適です。
couch db
ご協力ありがとうございます。 1 ページのキャッシュをテストし、1 つの HTML を生成しました。
たとえば、条件に従ってデータをクエリし、キャッシュ時間を 1 分に設定しました。
その結果、私はクエリ条件を選択しました、データは変更されていません
必要なのはクエリ時間を選択することだと思います、そして、同僚、同じクエリ条件が 1 分ごとに更新されました、
たとえば、時間領域を選択すると、デフォルトは過去 1 日のデータになります。
昨日の条件付きクエリを選択すると、一昨日の詩が必要になります。
昨日のデータをもう一度クエリすると、やはり表示されます。前日のデータですが、1分以内は更新されません
1分以内 明後日のデータを選択すると、明後日のデータになります。 、一昨日のデータではありません
クエリ条件が変更され、その日の条件に応じて 1 分、1 時間、または 1 日キャッシュが実行されることを意味します
他のクエリには影響しません。もちろん他の条件も1分または1時間です。 1 日分のキャッシュ
率直に言うと、条件付きクエリに基づいてデータをキャッシュすることを意味します
この場合、キャッシュする必要があるのは、それ以降、常にシーンです歴史。なぜなら、誰でも過去のいつからでもクエリを開始できるからです
1 分を境界として 1 年とすると、少なくとも 6151680 個のキャッシュ アイテムが必要です これは明らかに望ましくないです
使用可能なクエリ式は限られているため、複数のビューを作成できますクエリ式に基づいて。したがって、クエリ操作は完了のためにデータベース バックグラウンドに引き渡されます
はい!だから頭が痛いんです! ! !
そこで、それをメモリに置き、定期的にメモリをクリーンアップしたいと思います
入力バッファと出力バッファを使用してファイルキャッシュを作成します
Varnish はページのキャッシュを行うことができます
これは、一部の URL ナビゲーション Web サイトのホームページ キャッシュと同じです。ただ、クライアント上でホームページを 1 か月、3 か月などの長期間キャッシュする場合があります...
具体的な方法は次のとおりです:
1. によって参照される関連要素 (画像、CSS ファイルなど) をキャッシュします。ホームページの JS ファイルなど) をキャッシュなどの特別なディレクトリに追加します。
2. ルールを .htaccess に追加します。
#Cache ホームページ オブジェクト
#RewriteCond %{HTTP_HOST} ^www.162100.com [NC]
#RewriteCond % {REQUEST_URI} ^$ [OR]
#RewriteCond %{REQUEST_URI} ^/$ [OR]
#RewriteCond %{REQUEST_URI} ^/index.html$ [NC]
#RewriteRule (index.html) gzip。 php?cfile =$1 [L]
#RewriteRule ^(cache/.+)$ gzip.php?cfile=$1 [L]
3. ルート ディレクトリ (つまり、同じディレクトリ) にファイル gzip.php を作成します。
<?phpif(empty($_REQUEST['cfile'])) exit();$filename=$_REQUEST['cfile'];//使用什么编码,你自己清楚$ext=strrchr($filename,'.');$type="Content-type: text/html; charset=utf-8";switch($ext) { case '.css': $type="Content-type: text/css"; break; case '.js': $type="Content-type: text/javascript"; break; case '.gif': $type="Content-type: image/gif"; break; case '.jpg': $type="Content-type: image/jpeg"; break; case '.png': $type="Content-type: image/png"; break; case '.html': $type="Content-type: text/html; charset=utf-8"; break; default: break; //exit();} if(file_exists($filename)){ $m_time=filemtime($filename); $l_time=gmdate("D, d M Y H:i:s", $m_time); if($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])==$m_time){ header("HTTP/1.1 304 Not Modified"); }else{ header("Expires: ".gmdate("D, d M Y H:i:s", time() + 2592000)." GMT"); //缓存时间自己定,我这个是1个月 header("Cache-Control: max-age=2592000"); //header("Pragma: "); header("Last-Modified: ".$l_time." GMT"); header($type); //header("Content-Length: ".filesize($filename).""); echo file_get_contents($filename); }}else{ header("HTTP/1.0 404 Not Found"); die;} ?>
また、上記の方法のキャッシュが有効であれば、ホームページやIEキャッシュフォルダ内の各要素のキャッシュ有効期限(有効期限がある場合は10分など)を確認することができます。 )、有効になったことを意味します。
ユーザーが閲覧する際、静的ホームページの有効期限が切れていない場合は自動的にクライアントキャッシュを呼び出し、有効期限が切れている場合は再生成されます。
こうやって書いたらみんな笑った。
以上がホームページ全体です
memcached データのキャッシュはあなたのためにあります
はい memcached