На сайте новостей у меня есть модель Article, и я хочу кэшировать последние статьи, так как ожидаю, что они имеют самые высокие хиты. Как я могу написать метод, который работает таким образом:
public function findById($id)
{
if(Article::inMemory($id))
return Article::findFromMemory($id);
return Article::find($id);
}
Если есть более подходящие подходы, пожалуйста, укажите их
use Cache;
public function findById($id)
{
if ($articleInCache = Cache::get('article-' . $id)) {
return $articleInCache;
}
return Article::find($id);
}
Есть несколько драйверов памяти, которые вы можете использовать, и вы можете определить, как вы хотите сохранить значения в памяти. Выше предполагается, что вы сохранили значение с «article-». $ id (например, «article-5» в качестве ключа). Тебе решать.
Проверьте документы: https://laravel.com/docs/master/cache
Проверьте Laracasts: https://laracasts.com/series/real-time-laravel-with-socket-io/episodes/2
В Laravel для этого сценария есть функция, которая называется Retrieve Or Update:
use Cache;
public function findById($id)
{
return Cache::rememberForever("article-$id", function () use ($id) {
return Article::find($id);
});
}
Это кеширует и возвращает возвращаемое значение замыкания, в противном случае выполняется замыкание, чтобы заполнить кеш при необходимости.