Настройка
Laravel предоставляет унифицированное API для различных систем кэширования. Настройки кэша содержатся в файле app/config/cache.php. Здесь вы можете указать драйвер, используемый по умолчанию внутри вашего приложения. Laravel изначально поддерживает многие популярные системы, такие как Memcached и Redis.
Этот файл также содержит множество других настроек, которые в нём же документированы, поэтому обязательно ознакомьтесь с ними. По умолчанию, Laravel настроен для использования драйвера file, который хранит упакованные объекты кэша в файловой системе. Для больших приложений рекомендуется использование систем кэширования в памяти — таких как Memcached или APC.
Использование кэша
Cache::put('key', 'value', $minutes);
добавлено в 4.1 ()
Использование объектов Carbon для указания срока хранения
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
Запись элемента, если он не существует
Cache::add('key', 'value', $minutes);
Метод PHPadd
вернёт значение PHPtrue
, если элемент действительно добавлен в кэш. Иначе метод вернёт PHPfalse
.
Проверка существования элемента в кэше
if (Cache::has('key')) {
//
}
$value = Cache::get('key');
Чтение элемента или значения по умолчанию
$value = Cache::get('key', 'default');
$value = Cache::get('key', function () { return 'default'; });
Запись элемента на постоянное хранение
Cache::forever('key', 'value');
Иногда вам может быть нужно получить элемент из кэша или сохранить его там, если он не существует. Вы можете сделать это методом PHPCache::remember()
:
$value = Cache::remember('users', $minutes, function () {
return DB::table('users')->get();
});
Вы также можете совместить PHPremember()
и PHPforever()
:
$value = Cache::rememberForever('users', function () {
return DB::table('users')->get();
});
Обратите внимание, что все кэшируемые данные упаковываются (сериализуются), поэтому вы можете хранить любые типы.
добавлено в 4.2 ()
Cache::forget('key');
Увеличение и уменьшение значений
Все драйверы, кроме file и database, поддерживают операции инкремента и декремента.
Cache::increment('key');
// $amount - число; 'key' += $amount
Cache::increment('key', $amount);
Cache::decrement('key');
// $amount - число; 'key' -= $amount
Cache::decrement('key', $amount);
добавлено в 4.1 ()
Теги кэша
Внимание: теги кэша не поддерживаются драйверами file и database. Кроме того, при использовании нескольких тегов для кэшей, хранящихся «вечно», лучшая производительность будет достигнута при использовании такого драйвера как memcached, который автоматически зачищает устаревшие записи.
Теги кэша позволяют отмечать связанные элементы в кэше, и затем сбрасывать все элементы, отмеченные заданным именем. Для доступа к кэшу по тегам используйте метод PHPtags
.
Вы можете хранить отмеченный тегами кэш, передавая в качестве аргументов упорядоченный список имён тегов, или упорядоченный массив имён тегов:
Cache::tags('people', 'authors')->put('John', $john, $minutes);
Cache::tags(array('people', 'artists'))->put('Anne', $anne, $minutes);
Вы можете использовать любой метод хранения кэша в сочетании с тегами, включая PHPremember()
, PHPforever()
и PHPrememberForever()
. Вы также можете получить доступ к кэшированным элементам из отмеченного тегами кэша, а также использовать другие методы кэша, такие как PHPincrement()
и PHPdecrement()
.
Доступ к элементам кэша по тегам
Для доступа к кэшу по тегам передайте тот же упорядоченный список тегов, который был использован при сохранении.
$anne = Cache::tags('people', 'artists')->get('Anne');
$john = Cache::tags(array('people', 'authors'))->get('John');
Вы можете очистить все элементы с заданным тегом или списком тегов. Например, следующий код удалит все элементы, отмеченные либо тегом people, либо authors, либо и тем и другим. Поэтому и Anne и John будут удалены из кэша:
Cache::tags('people', 'authors')->flush();
В отличие от предыдущего, следующий код удалит только те элементы, которые отмечены тегом authors, поэтому John будет удалён, а Anne — нет.
Cache::tags('authors')->flush();
добавлено в 4.0 ()
Секции кэша (4.0)
Этот раздел относится только к версии 4.0.
Внимание: секции кэша не поддерживаются драйверами file и database.
Вы можете группировать элементы кэша в секции, а затем сбрасывать всю секцию целиком. Для доступа к секции используйте метод PHPsection()
.
Cache::section('people')->put('John', $john);
Cache::section('people')->put('Anne', $anne);
Вы можете использовать обычные операции над элементами секции, такие как чтение, запись, PHPincrement()
и PHPdecrement()
.
$anne = Cache::section('people')->get('Anne');
Вы также можете удалить всю секцию:
Cache::section('people')->flush();
Кэширование в базе данных
Перед использовании драйвера database вам нужно создать таблицу для хранения элементов кэша. Ниже приведён пример её структуры Schema:
Schema::create('cache', function ($table) {
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});
Комментарии (4)
Маленький хак, если надо закешировать не на 1 минуту а на секунду, то можно сделать Cache::add('key', 'value', 1 / 60); // это прокатит ))
а если написать
PHPCache::add('key', 'value', 1 * 60);
то получится час))а если серьезно, то зачем кешировать на одну секунду?
А если мне надо поставить лок на 3 секунды ? Как мне час поможет ?
А как можно для файлового кеша организовать Cache::section ? Как потом при пагинации очистить все ключи кеша ?Считать каждый раз кол-во , делить на кол-во на странице. Так получим кол-во страниц. И каждый ключ страницы удалять. Было бы удобнее удалить сразу секцию