РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
872 of 1392 menu

Метод flexible

Метод flexible класса Cache предназначен для гибкого получения данных из кэша с защитой от проблемы «ударной нагрузки» (cache stampede). Он принимает ключ кэша, массив с параметрами времени и замыкание для получения данных, когда кэш отсутствует или устарел. В отличие от метода remember, flexible позволяет возвращать старые данные, пока новые вычисляются в фоновом режиме, что гарантирует быстрый ответ и защиту от массовых запросов к тяжёлым источникам.

Синтаксис

<?php Cache::flexible($key, $ttl, $callback); ?>

Первый параметр $key - строковый идентификатор элемента кэша. Второй параметр $ttl - время жизни в секундах или массив [время_кэша, время_устаревания]. Третий параметр $callback - замыкание, которое возвращает данные для сохранения в кэш. Возвращаемое значение - данные из кэша или результат вызова замыкания.

Пример

Давайте получим данные из кэша с базовым временем жизни:

<?php use Illuminate\Support\Facades\Cache; $res = Cache::flexible('users_list', 3600, function () { return ['user 1', 'user 2', 'user 3']; }); echo json_encode($res); ?>

Результат выполнения кода:

["user 1", "user 2", "user 3"]

Пример

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

<?php use Illuminate\Support\Facades\Cache; $res = Cache::flexible('articles', [60, 5], function () { return ['article 1', 'article 2', 'article 3']; }); echo json_encode($res); ?>

Результат выполнения кода:

["article 1", "article 2", "article 3"]

Пример

Давайте используем flexible в контроллере для получения данных из базы данных:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Support\Facades\Cache; class ArticleController extends Controller { public function index() { $articles = Cache::flexible('articles.all', [300, 30], function () { return Article::all(); }); return view('articles.index', ['articles' => $articles]); } } ?>

Смотрите также

  • метод remember,
    который сохраняет данные в кэш с указанным временем
  • метод rememberForever,
    который сохраняет данные в кэш бессрочно
  • метод forget,
    который удаляет элемент из кэша
  • метод has,
    который проверяет наличие ключа в кэше
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить