Метод remember
Метод remember класса Cache позволяет получить значение из кеша по ключу. Если значение отсутствует, выполняется переданная замыкание-функция, результат которой сохраняется в кеш на указанное количество секунд, а затем возвращается. Первым параметром передаётся ключ, вторым - время жизни в секундах, третьим - замыкание, возвращающее данные для кеширования.
Синтаксис
<?php
use Illuminate\Support\Facades\Cache;
Cache::remember($key, $ttl, $callback);
?>
Пример
Давайте получим из кеша список статей. Если их нет в кеше, запросим из базы данных и сохраним на 10 минут:
<?php
use Illuminate\Support\Facades\Cache;
use App\Models\Article;
$articles = Cache::remember('articles_list', 600, function () {
return Article::all();
});
foreach ($articles as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
Пример
Давайте получим из кеша количество пользователей. Если данных нет, вычислим их и сохраним на 5 минут:
<?php
use Illuminate\Support\Facades\Cache;
use App\Models\User;
$count = Cache::remember('users_count', 300, function () {
return User::count();
});
echo "Users count: " . $count;
?>
Результат выполнения кода:
"Users count: 42"
Пример
Давайте получим из кеша сложные данные - массив с категориями товаров. Если их нет, создадим и сохраним на 1 час:
<?php
use Illuminate\Support\Facades\Cache;
use App\Models\Category;
$categories = Cache::remember('categories_tree', 3600, function () {
return Category::with('products')->get();
});
foreach ($categories as $category) {
echo $category->name . " (" . $category->products->count() . " products)";
}
?>
Результат выполнения кода:
"Electronics (15 products)"
"Books (8 products)"
"Clothing (23 products)"
Пример
Давайте используем метод в контроллере для кеширования результата тяжёлого запроса:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Cache;
use App\Models\Order;
class StatisticsController extends Controller
{
public function index()
{
$stats = Cache::remember('daily_stats', 86400, function () {
return [
'total_orders' => Order::count(),
'total_revenue' => Order::sum('total'),
'avg_order' => Order::avg('total')
];
});
return view('statistics', ['stats' => $stats]);
}
}
?>
Смотрите также
-
метод
get,
который получает значение из кеша -
метод
put,
который сохраняет данные в кеш -
метод
rememberForever,
который сохраняет данные в кеш бессрочно -
метод
forget,
который удаляет данные из кеша