Кэш
11.x
.
Почему это важно?
Настройка
Laravel предоставляет унифицированное API для различных систем кэширования. Настройки кэша содержатся в файле app/config/cache.php
. Там вы можете указать драйвер, который будет использоваться для кэширования. Laravel “из коробки” поддерживает многие популярные системы, такие как Memcached и Redis.
Этот файл также содержит множество других настроек, которые в нём же документированы, поэтому обязательно ознакомьтесь с ними. По умолчанию Laravel настроен для использования драйвера file
, который хранит упакованные объекты кэша в файловой системе. Для больших приложений рекомендуется использование систем кэширования в памяти – таких как Memcached
или APC
.
Использование кэша
Запись нового элемента в кэш
Cache::put('key', 'value', $minutes);
Использование объекта Carbon для установки времени жизни кэша
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
Запись элемента, если он не существует
Cache::add('key', 'value', $minutes);
Метод add
возвращает true
, если производится запись элемента в кэш. Иначе, если элемент уже есть в кэше, возвращается false
.
Проверка существования элемента в кэше
if (Cache::has('key'))
{
//
}
Чтение элемента из кэша
$value = Cache::get('key');
Чтение элемента или значения по умолчанию
$value = Cache::get('key', 'default');
$value = Cache::get('key', function() { return 'default'; });
Запись элемента на постоянное хранение
Cache::forever('key', 'value');
Иногда вам может быть нужно получить элемент из кэша или сохранить его там, если он не существует. Вы можете сделать это методом Cache::remember
:
$value = Cache::remember('users', $minutes, function()
{
return DB::table('users')->get();
});
Вы также можете совместить remember
и forever
:
$value = Cache::rememberForever('users', function()
{
return DB::table('users')->get();
});
Обратите внимание, что все кэшируемые данные сериализуются, поэтому вы можете хранить любые типы данных.
Чтение элемента с удалением
Если вы хотите получить элемент из кэша и затем удалить его, вы можете воспользоваться методом pull
:
$value = Cache::pull('key');
Удаление элемента из кэша
Cache::forget('key');
Увеличение и уменьшение значений
Все драйверы, кроме file
и database
, поддерживают операции инкремента
и декремента
.
Увеличение числового значения:
Cache::increment('key');
Cache::increment('key', $amount);
Уменьшение числового значения:
Cache::decrement('key');
Cache::decrement('key', $amount);
Тэги кэша
Примечание: тэги не поддерживаются драйверами
file
иdatabase
. Кроме того, если вы используете мультитэги для “вечных” элементов кэша (сохраненных как forever), наиболее подходящим с точки зрения производительности будет драйвер типаmemcached
– чтобы старые записи чистились в автоматическом режиме.
Обращение к группе элементов кэша
При помощи тэгов вы можете объединять элементы кэша в группы, а затем сбрасывать всю группу целиком. Для доступа к группе используйте метод tags
.
Элемент кэша можно в ключать в одну или несколько групп-тэгов. Список тэгов-групп можно перечислять через запятую в аргументах функции, или как элементы массива:
Cache::tags('people', 'authors')->put('John', $john, $minutes);
Cache::tags(array('people', 'authors'))->put('Anne', $anne, $minutes);
Вместе с объединения с тэгами Вы можете использовать обычные операции над элементами кэша, такие как чтение, запись, remember
, forever
, rememberForever
, increment
, decrement
.
Получение элементов из тэгированного кэша
Чтобы получить элемент кэша, вы должны указать все тэги, под которыми он был сохранен:
$anne = Cache::tags('people', 'artists')->get('Anne');
$john = Cache::tags(array('people', 'authors'))->get('John');
Тэги кэша нужны главным образом для того, чтобы можно было легко удалить несколько элементов кэша. Например, это выражение удалит все элементы кэша, которые содержатся в группах people
, authors
или в обоих сразу:
Cache::tags('people', 'authors')->flush();
И “Anne” и “John” будут удалены из кэша. Для сравнения, это выражение удалит только “John”:
Cache::tags('authors')->flush();
Кэширование в базе данных
Перед использовании драйвера database
вам нужно создать таблицу для хранения элементов кэша. Ниже приведён пример её структуры в формате миграции Laravel:
Schema::create('cache', function($table)
{
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});