亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Laravel使用Caching緩存數據減輕數據庫查詢壓力的方法

2024-05-04 23:43:58
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Laravel使用Caching緩存數據減輕數據庫查詢壓力的方法,以項目實例形式較為詳細的分析了Laravel框架使用Caching緩存的原理與具體實現技巧,需要的朋友可以參考下
 

本文實例講述了Laravel使用Caching緩存數據減輕數據庫查詢壓力的方法。分享給大家供大家參考,具體如下:

昨天想把自己博客的首頁做一下緩存,達到類似于生成靜態頁緩存的效果,在群里問了大家怎么做緩存,都挺忙的沒多少回復,我就自己去看了看文檔,發現了Caching這個部分,其實之前也有印象,但是沒具體接觸過,顧名思義,就是緩存了,那肯定和我的需求有點聯系,我就認真看了看,發現的確是太強大了,經過很簡單的幾個步驟,我就改裝好了首頁,用firebug測試了一下,提高了幾十毫秒解析時間,當然了有人會笑這有必要嗎,豈不是閑的蛋疼?其實我想這是有必要的,只是在我這里一來訪問人少(其實根本沒人還,嘿嘿....),二來我在首頁里做的查詢目前還挺少,就一次,就是取得所有博文,如果一個頁面里面有個七八次乃至十多次查詢,我想這個效果應該就很明顯了吧!(當然了,Raymond哥還有提到用更高級的專用緩存去做(memcached之類吧貌似),這是要自己能取得服務器控制權,能自由安裝軟件或者服務器本來就有這些緩存機制的情況下才能實現的,我需求比較簡單,也沒有這個環境去做,所以這里就不考慮了)

閑話少說,開始吧,先說說我的具體需求:

一.  實現首頁的數據緩存,如果有沒過期的緩存,就不查數據庫,這樣基本模擬出靜態頁的效果(當然了,其實還是要經過php處理的)

二.  實現刷新指定緩存的功能(這里只有首頁,就單指刷新首頁緩存了,這個功能,我做到了admin模塊下

具體實現:

一. 查閱文檔,找到能幫我實現需求的模塊

我查了一下文檔,發現了有Caching這樣一個模塊,顧名思義,就是緩存了,那它能否幫到我呢,看看先:

1. http://laravel.com/docs/cache/config  這里是laravel的Caching模塊的實現

2. 文檔中有如下描述:

The Basics     Imagine your application displays the ten most popular songs as voted on by your users. Do you really need to look up these ten songs every time someone visits your site? What if you could store them for 10 minutes, or even an hour, allowing you to dramatically speed up your application? Laravel's caching makes it simple.

我簡單理解為:

假設你的應用展示了用戶投票最多的10首流行歌曲,你真的需要在每個人訪問你的網站的時候都去查一遍這10首歌嗎?如果你想按10分鐘或者是一小時的頻率來緩存查詢結果來加速你的應用,Laravel 的 caching緩存模塊能將使工作變得異常簡單.

嗯,從這段話,我已經了解到這完全符合我現在的需求了,接下來我只需要找到對應的使用方法和API,一步一步來就行了.

二.  學習相應API等

1. 還是上面文檔,里面接著向下看,有如下描述:

By default, Laravel is configured to use the file system cache driver. It's ready to go out of the box with no configuration. The file system driver stores cached items as files in the cache directory. If you're satisfied with this driver, no other configuration is required. You're ready to start using it.

我簡單理解為:

默認情況下,Laravel使用文件系統作為緩存的驅動, 這是不需配置就可使用的, 文件系統驅動會將緩存的數據存入緩存目錄下的文件里面去, 如果你覺得合適的話不需要做任何其他的配置直接開始用就行了.

當然了, 這也是符合我的想法的, 其實我就是想把頁面緩存成靜態頁文件, 用戶再次訪問時直接輸出緩存的靜態頁就ok了, 如果需要更高級的需求, 還可以使用其他的驅動,有數據庫驅動, memcached, redis驅動等, 很好很強大!

2. 接下來查看用例,找到使用方法

用例文檔在這: http://laravel.com/docs/cache/usage

可以看出, 里面有 get, put, forever, remember, has, forget 等方法,這些方法使用也是基本上能 "望文生義" 就能搞定的,呵呵

具體使用方法文檔里面已經說的夠詳細, 使用方法一目了然我就不細說了, 只在代碼里面說吧

三. 具體實現

1. 我首頁之前的代碼

class Home_Controller extends Base_Controller { public function get_index() {  $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'));  $data = array();  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   );  }  return View::make('home.index')    -> with('posts', $data); }}

這是我首頁的controller,作用只有一個, 就是從博文表里面取得所有博文, 然后輸出, 每次有人訪問, 都要查表, 如果沒有發表新的博文, 也要查表, 的確有很多不必要的開銷

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() 判斷是個簡單的判斷,只有管理員組才能進行刷新操作,呵呵

嗯, 全部內容就這么多, 很簡單, 歡迎童鞋們拍磚指正!



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩一区二区三区在线播放| 国外成人在线播放| 57pao成人国产永久免费| 亚洲人成电影在线播放| 久久精品国产v日韩v亚洲| 久久久噜噜噜久久久| 国产成人久久久| 成人国产亚洲精品a区天堂华泰| 日韩美女写真福利在线观看| 亚洲视频免费一区| 欧美高清视频免费观看| 亚洲乱码av中文一区二区| 法国裸体一区二区| 亚洲欧美日韩另类| 亚洲国产一区自拍| 国产精品女视频| 亚洲成人久久久久| 欧美高清在线观看| 久久精品电影一区二区| 欧美成人三级视频网站| 欧美国产中文字幕| 日韩电影在线观看免费| 狠狠综合久久av一区二区小说| 国产一区二区三区日韩欧美| 精品视频久久久久久久| 69精品小视频| 国产日韩欧美日韩大片| 亚洲日本中文字幕免费在线不卡| 国产69久久精品成人| 日韩精品免费在线观看| 国产不卡精品视男人的天堂| 欧美日韩ab片| 色老头一区二区三区| 欧美激情区在线播放| 亚洲二区在线播放视频| 久久91精品国产91久久久| 亚洲午夜未满十八勿入免费观看全集| 久久影院模特热| 亚洲精品一区二区网址| 亚洲热线99精品视频| 91精品久久久久久久久不口人| 亚洲一区二区久久| 国产精品久久婷婷六月丁香| 精品国产一区二区三区久久| 精品亚洲国产视频| 国产日韩欧美在线看| 亚洲最新视频在线| 69视频在线免费观看| 欧美日韩综合视频网址| 福利精品视频在线| 亚洲free性xxxx护士hd| 中文字幕亚洲欧美日韩高清| 亚洲free性xxxx护士白浆| 国产亚洲综合久久| 久热精品在线视频| 在线播放亚洲激情| 亚洲综合中文字幕在线| 欧美与欧洲交xxxx免费观看| 久久久成人的性感天堂| 9.1国产丝袜在线观看| 亚洲成人激情在线| 91大神在线播放精品| 黑人巨大精品欧美一区二区| 亚洲黄页网在线观看| 欧美精品制服第一页| 中文国产亚洲喷潮| 久久亚洲欧美日韩精品专区| 亚洲欧洲午夜一线一品| 亚州av一区二区| 黑人欧美xxxx| 精品视频在线播放| 精品日本高清在线播放| 久久久久国产精品www| 米奇精品一区二区三区在线观看| 国产综合在线观看视频| 国产精品久久久久久五月尺| 久久精品视频亚洲| 日韩成人在线视频| 欧美韩日一区二区| 亚洲国产天堂网精品网站| 青青久久av北条麻妃黑人| 久久久免费高清电视剧观看| 亚洲人成伊人成综合网久久久| 国产精品综合不卡av| 日韩视频免费大全中文字幕| 久久久精品视频成人| 狠狠爱在线视频一区| 欧美在线视频a| 欧美视频不卡中文| 亚洲最大成人免费视频| 2021久久精品国产99国产精品| 亚洲精品电影在线| 日韩视频在线免费观看| 日韩视频永久免费观看| 国内精品在线一区| 亚洲国产精彩中文乱码av| 欧日韩不卡在线视频| 欧美一区二区视频97| 欧美成人免费全部| 久久精品一区中文字幕| 亚洲精品v欧美精品v日韩精品| 欧美激情视频一区二区| 国产精品免费福利| 亚洲电影免费观看高清完整版在线观看| 欧美激情在线播放| 日韩中文字幕在线看| 在线观看精品国产视频| 91av中文字幕| 亚洲视频自拍偷拍| 亚洲精品日韩丝袜精品| 久久伊人精品视频| 亚洲成av人影院在线观看| 国产91精品久久久| 中文字幕在线视频日韩| 91夜夜揉人人捏人人添红杏| 日本中文字幕久久看| 国产精品自产拍在线观| 国产精品久久77777| 欧美成在线视频| 欧美日韩久久久久| 亚洲欧美国产va在线影院| www国产亚洲精品久久网站| 成人福利在线观看| 亚洲视频在线视频| 日韩成人性视频| 亚洲精品免费网站| 国产精品老女人精品视频| 欧美日韩国产第一页| 亚洲影院色无极综合| 国模精品一区二区三区色天香| 日韩欧美在线中文字幕| 久久久久久久久久久网站| 久久精品青青大伊人av| 亚洲国产成人久久综合| 久久99国产精品自在自在app| 国产69久久精品成人看| 国产精品视频不卡| 欧美一乱一性一交一视频| 国产精品99一区| 97精品在线视频| 一区二区三区视频免费在线观看| 国产主播喷水一区二区| 日韩国产欧美精品在线| 日韩av中文字幕在线免费观看| 国产区亚洲区欧美区| 国产精品自产拍在线观| 亚洲国产99精品国自产| 色偷偷综合社区| 精品久久久久久国产91| 欧美日本精品在线| 久久久久久久久久国产| 97精品伊人久久久大香线蕉| 国产日韩精品综合网站| 久久久国产精品亚洲一区| 青草青草久热精品视频在线网站| 91牛牛免费视频| 色噜噜久久综合伊人一本| 爱福利视频一区| 最近2019年日本中文免费字幕| 日韩国产精品亚洲а∨天堂免| 欧美日韩成人在线视频| 国产精品日韩专区| 日本视频久久久| 久久久成人av|