UX Labs
UX Labs

Reputation: 1521

Laravel, using in-memory DB to cache results

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

Upvotes: 15

Views: 2707

Answers (2)

tjbp
tjbp

Reputation: 3517

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.

Upvotes: 4

Deciple
Deciple

Reputation: 1952

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

Upvotes: 3

Related Questions