git 4fb851e8257a6bc25bb10fa47dd47e8cbd93c09f
Laravel предоставляет унифицированное API для различных систем кэширования. Настройки кэша содержатся в файле config/cache.php
. Там вы можете указать драйвер, который будет использоваться для кэширования. Laravel "из коробки" поддерживает многие популярные системы, такие как Memcached и Redis.
Этот файл также содержит множество других настроек, которые в нём же документированы, поэтому обязательно ознакомьтесь с ними. По умолчанию Laravel настроен для использования драйвера file
, который хранит сериализованные объекты кэша в файловой системе. Для больших приложений рекомендуется использование систем кэширования в памяти - таких как Memcached
или APC
.
Вы так же можете создать несколько разных конфигурций для одного драйвера.
Прежде чем использовать Redis, необходимо установить пакет predis/predis
версии ~1.0
через Composer.
Cache::put('key', 'value', $minutes);
$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');
Если вы используете несколько хранилищ для кэша (с одинаковыми или разными драйверами) - вы можете обратиться к конкретному хранилищу следующим образом:
$value = Cache::store('foo')->get('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(['people', 'authors'])->put('Anne', $anne, $minutes);
Любой метод для записи в кэш можно использовать в связке с тэгами, включая remember
, forever
и rememberForever
. Элемент кэша также можно получить из кэша с тэгом, так же как и использовать другие методы кэша, такие как increment
и decrement
.
Чтобы получить элемент кэша, вы должны указать все тэги, под которыми он был сохранен:
$anne = Cache::tags('people', 'artists')->get('Anne');
$john = Cache::tags(['people', 'authors'])->get('John');
Вы можете очистить все элементы по тэгу или списку тэгов. Например, это выражение удалит все элементы кэша с тэгом или people
, или authors
, или в обоих сразу. Таким образом, и "Anne", и "John" будут удалены из кэша:
Cache::tags('people', 'authors')->flush();
Для сравнения, это выражение удалит только элементы с тэгом authors
, таким образом "John" будет удален, а "Anne" нет:
Cache::tags('authors')->flush();
Перед использовании драйвера database
вам понадобится создать таблицу для хранения элементов кэша. Ниже приведён пример её структуры в виде миграции Laravel:
Schema::create('cache', function($table)
{
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});