Метод 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,
который проверяет наличие ключа в кэше