您好,登錄后才能下訂單哦!
Laravel中怎么使用Caching緩存數據,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一. 查閱文檔,找到能幫我實現需求的模塊
我查了一下文檔,發現了有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 '對不起,只有管理員組才可進行此操作!'; }
關于Laravel中怎么使用Caching緩存數據問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。