Laravel, используя встроенную память для кэширования результатов

На веб-сайте новостей у меня есть модель статьи, и я хочу кэшировать последние статьи, так как я ожидаю, что у них будут самые высокие удары. Как написать метод, который работает таким образом:

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

    return Article::find($id);
}

Если есть какие-то лучшие подходы, укажите их также

Ответы

Ответ 1

use Cache;
public function findById($id) 
{
    if ($articleInCache = Cache::get('article-' . $id)) {
        return $articleInCache;
    }
    return Article::find($id);
}

Существует несколько драйверов памяти, которые вы можете использовать, и вы можете определить, как вы хотите сохранить значения в памяти. Выше, предполагается, что вы сохранили значение с помощью "статьи". $id (например, "статья-5" в качестве ключа). Это зависит от вас.

Посмотрите документы: https://laravel.com/docs/master/cache

Отъезд Laracasts: https://laracasts.com/series/real-time-laravel-with-socket-io/episodes/2

Ответ 2

У Laravel есть функция явно для этого сценария, называемая Retrieve or Update:

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

Это кэширует и возвращает возвращаемое значение закрытия, в противном случае выполняется закрытие, чтобы заполнить кеш при необходимости.