Adding Cache to your Laravel Site
Using Laravel’s built in Cache facade is super easy. I will quickly cover how to use it for showing your Posts and showing a Post.
Example 1 Show a Post
This example will first check the Cache to see if there is a match for post_ID of the post if not it will make one. Also I happen to do the same for the sidebar.
public function show($id)
{
$post = Cache::rememberForever('post_' . $id, function() use ($id)
{
return Post::findOrFail($id);
});
$posts = Cache::rememberForever('posts_sidebar', function()
{
return Post::all()->sortBy("created_at", null, TRUE);
});
$active = $post->id;
return View::make('posts.show', compact('post', 'posts', 'active'));
}
Of course this could be moved into a Service and out of the Controller.
It really is that simple
All Posts
Same thing.
If you are not authenticated, eg all users but me, and there is no posts cache make one else show it.
if(Auth::user()) {
$posts = Post::OrderByCreatedAt()->get();
} else {
$posts = Cache::rememberForever('posts', function()
{
return Post::Published()->OrderByCreatedAt()->get();
});
}
Clearing Cache
For this I made a PostsObeserver Class
This will reset Cache for the related caches whenever a post is made or updated.
<?php
use Illuminate\Support\Facades\Cache;
class PostObserver {
public function saved($model)
{
foreach(['posts_sidebar', 'posts'] as $value)
{
Cache::forget($value);
}
Cache::forget('post_' . $model->id);
}
}
Then I register it in the model
public static function boot()
{
parent::boot();
Post::observe(new PostObserver());
}
comments powered by Disqus