{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 04:19:00, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Настройка == Laravel предоставляет унифицированное API для различных систем кэширования. Настройки кэша содержатся в файле %%(t)app/config/cache.php%%. Здесь вы можете указать драйвер, используемый по умолчанию внутри вашего приложения. Laravel изначально поддерживает многие популярные системы, такие как ((http://memcached.org/ Memcached)) и ((http://redis.io/ Redis)). Этот файл также содержит множество других настроек, которые в нём же документированы, поэтому обязательно ознакомьтесь с ними. По умолчанию, Laravel настроен для использования драйвера **file**, который хранит упакованные объекты кэша в файловой системе. Для больших приложений рекомендуется использование систем кэширования в памяти - таких как Memcached или ((phpdoc:book.apc APC)). == Использование кэша == **Запись нового элемента в кэш** %% Cache::put('key', 'value', $minutes); %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00) **Использование объектов 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(); }); %% Обратите внимание, что все кэшируемые данные упаковываются (сериализуются), поэтому вы можете хранить любые типы. %%(DOCNEW 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15) **Извлечение элемента из кэша** Если вы хотите получить элемент из кэша и затем удалить его, используйте метод %%pull%%: ~%% $value = Cache::pull('key'); ~%% %% **Удаление элемента из кэша** %% 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); %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 05:21:00) == Теги кэша == .(alert) **Внимание:** теги кэша не поддерживаются драйверами **file** и **database**. Кроме того, при использовании нескольких тегов для кэшей, хранящихся "вечно", лучшая производительность будет достигнута при использовании такого драйвера как **memcached**, который автоматически зачищает устаревшие записи. **Доступ к кэшу по тегам** Теги кэша позволяют отмечать связанные элементы в кэше, и затем сбрасывать все элементы, отмеченные заданным именем. Для доступа к кэшу по тегам используйте метод %%tags%%. Вы можете хранить отмеченный тегами кэш, передавая в качестве аргументов упорядоченный список имён тегов, или упорядоченный массив имён тегов: ~%% Cache::tags('people', 'authors')->put('John', $john, $minutes); Cache::tags(array('people', 'artists'))->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**, либо и тем и другим. Поэтому и **Anne** и **John** будут удалены из кэша: ~%% Cache::tags('people', 'authors')->flush(); ~%% В отличие от предыдущего, следующий код удалит только те элементы, которые отмечены тегом **authors**, поэтому **John** будет удалён, а **Anne** - нет. ~%% Cache::tags('authors')->flush(); ~%% %% %%(DOCNEW 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 04:19:00) == Секции кэша (4.0) == .(tl_note) Этот раздел относится только к версии 4.0. .(alert) **Внимание:** секции кэша не поддерживаются драйверами **file** и **database**. Вы можете группировать элементы кэша в секции, а затем сбрасывать всю секцию целиком. Для доступа к секции используйте метод %%section()%%. **Обращение к секции кэша** ~%% Cache::section('people')->put('John', $john); Cache::section('people')->put('Anne', $anne); ~%% Вы можете использовать обычные операции над элементами секции, такие как чтение, запись, %%increment()%% и %%decrement()%%. **Чтение элемента секции** ~%% $anne = Cache::section('people')->get('Anne'); ~%% Вы также можете удалить всю секцию: ~%% Cache::section('people')->flush(); ~%% %% == Кэширование в базе данных == Перед использовании драйвера **database** вам нужно создать таблицу для хранения элементов кэша. Ниже приведён пример её ((docs/v4/schema структуры Schema)): %% Schema::create('cache', function ($table) { $table->string('key')->unique(); $table->text('value'); $table->integer('expiration'); }); %%