この記事では、Laravel がキャッシュを使用してデータをキャッシュし、データベースクエリのプレッシャーを軽減する例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
昨日、静的ページキャッシュを生成するのと同じような効果を得るためにブログのトップページをキャッシュしたいと思い、グループの全員にキャッシュする方法を尋ねましたが、全員が非常に忙しく、あまり返事がありませんでした。実際にドキュメントを読んでみると、キャッシュの部分については見たことがありましたが、名前が示すとおり、キャッシュについては特に触れたことはありませんでした。私のニーズに関連して、詳しく調べてみたところ、いくつかの簡単な手順を実行しただけで、ホームページを変更し、Firebug でテストし、解析時間を数十ミリ秒改善したことがわかりました。もちろん、そんな必要があるのかと笑う人もいるでしょう。実際、ここにはあまり訪問者がいないだけです(実際には誰も戻ってきません、笑)。 .)、そして第二に、私がホームページで行ったクエリはこれまでのところ非常に少なく、すべてのブログ投稿を取得するためのもので、7 つまたは 8 つ、場合によっては 10 つ以上のクエリがあったとしても、その効果はあると思います。 (もちろん、レイモンド兄弟は、より高度な専用キャッシュ (memcached など) の使用についても言及しましたが、これは、サーバーを制御してソフトウェアを自由にインストールできる場合、またはサーバーがすでにインストールされている場合にのみ実現できます)私のニーズは比較的単純であり、それを実行する環境がないため、ここでは考慮しません)
早速、私の具体的なニーズについて話していきましょう:
1. ホームページにデータ キャッシュを実装します。期限切れになっていないキャッシュがある場合、データベースはチェックされません (もちろん、PHP による処理が必要です)。
2. 指定したキャッシュを更新する機能を実装します(ここにはホームページしかないので、ホームページのキャッシュを更新するだけです。この機能はadminモジュールの下に実装しました)
詳細な実装:
1. ドキュメントを確認して、私のニーズを達成するのに役立つモジュールを見つけてください
ドキュメントを確認したところ、名前が示すように、キャッシュというモジュールがあることがわかりました。まず見てみましょう。1. http://laravel.com/docs/cache/config これはlaravelのCachingモジュールの実装です
2. 文書には次のような説明があります:
基本 あなたのアプリケーションが、ユーザーによって投票された最も人気のある 10 曲を表示していると想像してください。誰かがあなたのサイトにアクセスするたびに、これらの 10 曲を検索する必要があるでしょうか? Laravel のキャッシュを使用すると、アプリケーションが大幅に高速化できます。私は単に次のように理解しています:
あなたのアプリがユーザーによって投票された最も人気のある 10 曲を表示すると仮定します。アプリケーションを高速化するために 10 分または 1 時間クリックしたい場合、ユーザーが Web サイトにアクセスするたびにこれら 10 曲を確認する必要がありますか? , Laravel のキャッシュモジュールを使用すると、この作業が非常に簡単になります
さて、この段落から、これが現在のニーズを完全に満たしていることがわかりました。次に、対応する使用方法と API を段階的に見つける必要があります。
2. 対応するAPIなどを学習します
1. 上記のドキュメントを下に見て、次の説明を参照してください。
デフォルトでは、Laravel はファイル システム キャッシュ ドライバーを使用するように構成されています。このドライバーに問題がなければ、ファイル システム ドライバーはキャッシュされたアイテムをそのままキャッシュ ディレクトリに保存します。他の設定は必要ありません。すぐに使用できます。私は単に次のように理解しています: デフォルトでは、Laravel はファイル システムをキャッシュ ドライバーとして使用します。これは、ファイル システム ドライバーによってキャッシュされたデータがキャッシュ ディレクトリ内のファイルに保存されます。他の構成の場合は、そのまま使用を開始してください。
もちろん、これは私のアイデアにも沿っています。実際には、ユーザーが再度アクセスしたときに、キャッシュされた静的ページを直接出力するだけです。より高度な要件がある場合は、データベース ドライバー、memcached、redis ドライバーなどの他のドライバーを使用することもできます。これらは非常に優れており強力です!2. 次に、ユースケースを確認し、使用方法を確認します
ユースケースドキュメントはここにあります: http://laravel.com/docs/cache/usage
ご覧のとおり、get、put、forever、remember、has、forget などのメソッドがあります。これらのメソッドは基本的に「文字通り」使用できます (笑)
具体的な使い方のドキュメントは十分に詳しく説明されていますが、使い方は一目瞭然なので詳細は説明しません
。 3. 具体的な実装1. 私のホームページの前のコード
リーリーこれは私のホームページのコントローラーです。機能は 1 つだけです。それは、誰かがアクセスするたびに、新しいブログ投稿がない場合は、そのテーブルをチェックする必要があります。公表されている表は確かに不正確な部分が多いので要チェックです。 2. 以下は私の修正後のコードです:
class Home_Controller extends Base_Controller { public function get_index() { // 添加静态缓存支持 // 如果不存在静态页缓存就立即缓存 if ( !Cache::has('staticPageCache_home') ) { $data = array(); $posts = Post::with('user') ->join('users', 'users.id', '=', 'posts.post_author') -> order_by('posts.created_at', 'desc') ->get(array('posts.id', 'posts.support', 'posts.against', 'users.username', 'posts.post_author', 'posts.post_title', 'posts.post_body')); foreach($posts as $p){ $data[] = array( 'id' => $p -> id, 'support' => $p -> support, 'against' => $p -> against, 'username'=> $p -> username, 'post_author' => $p -> post_author, 'post_title' => $p -> post_title, 'post_body' => $p -> post_body ); } $res = View::make('home.index') -> with('posts', $data); Cache::forever('staticPageCache_home', $res); } // 返回缓存的数据 return Cache::get('staticPageCache_home'); } }
这里我用到了三个api
1). Cache::has ,这个判断是说如果当前不存在 staticPageCache_home 这个名字的缓存, 就立即去取数据
2). Cache::forever, 这个从用例文档里面可知是"永久缓存"的意思, 因为我一般都是很勤劳的,如果发表了博文,自己再去后台立即刷新一下缓存就好了, 所以不需要设置过期啊失效时间之类的, 当然这个是要按各自的具体需求来的
3). Cache::get , 这句是从缓存里面取出 staticPageCache_home 这个名字的缓存, 然后作为响应内容返回
嗯, 就这么简单, 呵呵, 一个基本的缓存功能就完成了, laravel的确是不错地!
3. 为后台添加刷新缓存功能
还是贴代码吧, 不过也很简单:
// 刷新首页缓存(暂时只支持首页) public function get_refreshcache() { /* @var $GID admin组id */ $GID = 1; if ( Auth::user() -> gid === 1 ) { $data = array(); $posts = Post::with('user') ->join('users', 'users.id', '=', 'posts.post_author') -> order_by('posts.created_at', 'desc') ->get(array('posts.id', 'posts.support', 'posts.against', 'users.username', 'posts.post_author', 'posts.post_title', 'posts.post_body')); foreach($posts as $p){ $data[] = array( 'id' => $p -> id, 'support' => $p -> support, 'against' => $p -> against, 'username'=> $p -> username, 'post_author' => $p -> post_author, 'post_title' => $p -> post_title, 'post_body' => $p -> post_body ); } $res = View::make('home.index') -> with('posts', $data); Cache::forever('staticPageCache_home', $res); return '刷新首页缓存成功!'; } return '对不起,只有管理员组才可进行此操作!'; }
我给后台添加了一个项目, 对应这个方法, 方法内容和首页的大同小异, 取数据, 然后Cache::forever 刷新一下缓存,就这么简单,当然了,上面的Auth::user() 判断是个简单的判断,只有管理员组才能进行刷新操作,呵呵
嗯, 全部内容就这么多, 很简单, 欢迎童鞋们拍砖指正!
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。