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);
});
}
Это кэширует и возвращает возвращаемое значение закрытия, в противном случае выполняется закрытие, чтобы заполнить кеш при необходимости.