Может войдёшь?
Черновики Написать статью Профиль

Кэш

перевод документация 4.x

  1. 1. Настройка
  2. 2. Использование кэша
  3. 3. Увеличение и уменьшение значений
  4. 4. Теги кэша
  5. 5. Секции кэша (4.0)
  6. 6. Кэширование в базе данных
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Настройка

Laravel предоставляет унифицированное API для различных систем кэширования. Настройки кэша содержатся в файле app/config/cache.php. Здесь вы можете указать драйвер, используемый по умолчанию внутри вашего приложения. Laravel изначально поддерживает многие популярные системы, такие как Memcached и Redis.

Этот файл также содержит множество других настроек, которые в нём же документированы, поэтому обязательно ознакомьтесь с ними. По умолчанию, Laravel настроен для использования драйвера file, который хранит упакованные объекты кэша в файловой системе. Для больших приложений рекомендуется использование систем кэширования в памяти — таких как Memcached или APC.

Использование кэша

Запись нового элемента в кэш

PHP
Cache::put('key''value'$minutes);
+ 4.1

добавлено в 4.1 ()

Использование объектов Carbon для указания срока хранения

PHP
$expiresAt Carbon::now()->addMinutes(10);

Cache::put('key''value'$expiresAt);

Запись элемента, если он не существует

PHP
Cache::add('key''value'$minutes);

Метод PHPadd вернёт значение PHPtrue, если элемент действительно добавлен в кэш. Иначе метод вернёт PHPfalse.

Проверка существования элемента в кэше

PHP
if (Cache::has('key')) {
  
//
}

Чтение элемента из кэша

PHP
$value Cache::get('key');

Чтение элемента или значения по умолчанию

PHP
$value Cache::get('key''default');

$value Cache::get('key', function () { return 'default'; });

Запись элемента на постоянное хранение

PHP
Cache::forever('key''value');

Иногда вам может быть нужно получить элемент из кэша или сохранить его там, если он не существует. Вы можете сделать это методом PHPCache::remember():

PHP
$value Cache::remember('users'$minutes, function () {
  return 
DB::table('users')->get();
});

Вы также можете совместить PHPremember() и PHPforever():

PHP
$value Cache::rememberForever('users', function () {
  return 
DB::table('users')->get();
});

Обратите внимание, что все кэшируемые данные упаковываются (сериализуются), поэтому вы можете хранить любые типы.

+ 4.2

добавлено в 4.2 ()

Извлечение элемента из кэша

Если вы хотите получить элемент из кэша и затем удалить его, используйте метод PHPpull:

PHP
$value Cache::pull('key');

Удаление элемента из кэша

PHP
Cache::forget('key');

Увеличение и уменьшение значений

Все драйверы, кроме file и database, поддерживают операции инкремента и декремента.

Увеличение числового значения

PHP
Cache::increment('key');

// $amount - число; 'key' += $amount
Cache::increment('key'$amount);

Уменьшение числового значения

PHP
Cache::decrement('key');

// $amount - число; 'key' -= $amount
Cache::decrement('key'$amount);
+ 4.1

добавлено в 4.1 ()

Теги кэша

Внимание: теги кэша не поддерживаются драйверами file и database. Кроме того, при использовании нескольких тегов для кэшей, хранящихся «вечно», лучшая производительность будет достигнута при использовании такого драйвера как memcached, который автоматически зачищает устаревшие записи.

Доступ к кэшу по тегам

Теги кэша позволяют отмечать связанные элементы в кэше, и затем сбрасывать все элементы, отмеченные заданным именем. Для доступа к кэшу по тегам используйте метод PHPtags.

Вы можете хранить отмеченный тегами кэш, передавая в качестве аргументов упорядоченный список имён тегов, или упорядоченный массив имён тегов:

PHP
Cache::tags('people''authors')->put('John'$john$minutes);

Cache::tags(array('people''artists'))->put('Anne'$anne$minutes);

Вы можете использовать любой метод хранения кэша в сочетании с тегами, включая PHPremember(), PHPforever() и PHPrememberForever(). Вы также можете получить доступ к кэшированным элементам из отмеченного тегами кэша, а также использовать другие методы кэша, такие как PHPincrement() и PHPdecrement().

Доступ к элементам кэша по тегам
Для доступа к кэшу по тегам передайте тот же упорядоченный список тегов, который был использован при сохранении.

PHP
$anne Cache::tags('people''artists')->get('Anne');

$john Cache::tags(array('people''authors'))->get('John');

Вы можете очистить все элементы с заданным тегом или списком тегов. Например, следующий код удалит все элементы, отмеченные либо тегом people, либо authors, либо и тем и другим. Поэтому и Anne и John будут удалены из кэша:

PHP
Cache::tags('people''authors')->flush();

В отличие от предыдущего, следующий код удалит только те элементы, которые отмечены тегом authors, поэтому John будет удалён, а Anne — нет.

PHP
Cache::tags('authors')->flush();
+ 4.0

добавлено в 4.0 ()

Секции кэша (4.0)

Этот раздел относится только к версии 4.0.

Внимание: секции кэша не поддерживаются драйверами file и database.

Вы можете группировать элементы кэша в секции, а затем сбрасывать всю секцию целиком. Для доступа к секции используйте метод PHPsection().

Обращение к секции кэша

PHP
Cache::section('people')->put('John'$john);

Cache::section('people')->put('Anne'$anne);

Вы можете использовать обычные операции над элементами секции, такие как чтение, запись, PHPincrement() и PHPdecrement().

Чтение элемента секции

PHP
$anne Cache::section('people')->get('Anne');

Вы также можете удалить всю секцию:

PHP
Cache::section('people')->flush();

Кэширование в базе данных

Перед использовании драйвера database вам нужно создать таблицу для хранения элементов кэша. Ниже приведён пример её структуры Schema:

PHP
Schema::create('cache', function ($table) {
  
$table->string('key')->unique();
  
$table->text('value');
  
$table->integer('expiration');
});

Комментарии (4)

Ruzarh

Маленький хак, если надо закешировать не на 1 минуту а на секунду, то можно сделать Cache::add('key', 'value', 1 / 60); // это прокатит ))

HellScaryMan

а если написать PHPCache::add('key''value'60); то получится час))
а если серьезно, то зачем кешировать на одну секунду?

Ruzarh

А если мне надо поставить лок на 3 секунды ? Как мне час поможет ?

l2cri

А как можно для файлового кеша организовать Cache::section ? Как потом при пагинации очистить все ключи кеша ?Считать каждый раз кол-во , делить на кол-во на странице. Так получим кол-во страниц. И каждый ключ страницы удалять. Было бы удобнее удалить сразу секцию

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.