Версия фреймворка: 5.4 4.2

Кэш

Настройка

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');
});