Laravel, using in-memory DB to cache results
Asked Answered
R

2

15

On News Website, I have an Article model, and I want to cache the latest articles since I expect they have the highest hits. How can I write a method that operates in this way:

public function findById($id)
{
    if(Article::inMemory($id))
        return Article::findFromMemory($id);

    return Article::find($id);
}

If there are any better approaches, please mention them as well

Rupp answered 17/1, 2016 at 21:30 Comment(1)
laravel.com/docs/5.2/cacheCerebritis
L
4

Laravel has a feature explicitly for this scenario, called Retrieve Or Update:

use Cache;
public function findById($id)
{
    return Cache::rememberForever("article-$id", function () use ($id) {
        return Article::find($id);
    });
}

This will cache and return the closure's returned value, otherwise executing the closure to populate the cache if needed.

Lame answered 26/1, 2016 at 16:1 Comment(0)
J
3
use Cache;
public function findById($id) 
{
    if ($articleInCache = Cache::get('article-' . $id)) {
        return $articleInCache;
    }
    return Article::find($id);
}

There are multiple memory drivers you can use and you can determine how you want to store the values in memory. Above, it assumes you stored the value with the 'article-' . $id (such as "article-5" as the key). It's up to you.

Check out the docs: https://laravel.com/docs/master/cache

Check out Laracasts: https://laracasts.com/series/real-time-laravel-with-socket-io/episodes/2

Jeopardous answered 18/1, 2016 at 20:57 Comment(1)
You should also add the article to the cache if its not currently in thereChangchun

© 2022 - 2024 — McMap. All rights reserved.