Метод rememberForever
Метод rememberForever применяется к фасаду Cache
и позволяет получить данные из кеша по ключу. Если данные
отсутствуют, метод выполняет переданное замыкание и сохраняет
результат в кеш на бесконечный срок. Первым параметром
передаётся ключ, вторым - замыкание, которое возвращает
значение для сохранения.
Синтаксис
<?php
use Illuminate\Support\Facades\Cache;
$value = Cache::rememberForever($key, $callback);
?>
Пример
Давайте получим данные из кеша по ключу 'user_count'.
Если их нет, выполним запрос к базе данных и сохраним
результат навсегда:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Cache;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
$count = Cache::rememberForever('user_count', function () {
return User::count();
});
echo $count;
}
}
?>
Результат выполнения кода:
"150"
Пример
Давайте сохраним в кеш сложные данные, например, массив популярных статей. Если данные отсутствуют в кеше, они будут получены из базы и сохранены навсегда:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Cache;
use App\Models\Article;
class ArticleController extends Controller
{
public function popular()
{
$articles = Cache::rememberForever('popular_articles', function () {
return Article::where('views', '>', 100)
->orderBy('views', 'desc')
->limit(5)
->get();
});
foreach ($articles as $article) {
echo $article->title . "\n";
}
}
}
?>
Результат выполнения кода:
"Article 1"
"Article 2"
"Article 3"
"Article 4"
"Article 5"
Пример
Рассмотрим случай, когда нам нужно сохранить результат
выполнения ресурсоёмкой операции. Метод rememberForever
отлично подходит для кеширования результатов вычислений:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Cache;
class StatisticController extends Controller
{
public function show()
{
$stats = Cache::rememberForever('site_statistics', function () {
$res = [
'total_users' => 1250,
'total_orders' => 3456,
'total_revenue' => 78910
];
return $res;
});
echo json_encode($stats);
}
}
?>
Результат выполнения кода:
"{"total_users":1250,"total_orders":3456,"total_revenue":78910}"