Skip to main content

Работа кэшем

Данный помощник используется для работы с кэшем данных

Вступление

Некоторые из задач извлечения или обработки данных, выполняемых вашим приложением, могут сильно нагружать ЦП или выполняться несколько секунд. В этом случае принято кэшировать полученные данные на время, чтобы их можно было быстро извлечь при последующих запросах тех же данных. Кэшированные данные обычно хранятся в очень быстром хранилище данных.

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

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

Получение экземпляра кэша

Чтобы получить экземпляр кеша, вы можете использовать помощник Cache. Помощник Cache это удобный доступ к базовым реализациям функций кеша Darklyy:

namespace Test\UI\WEB\Controllers;

use Boot\Support\Facades\Cache;

class TestController extends Controller
{
public function index(): array
{
$value = Cache::get('key');
return [
// ...
];
}
}

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

Помощник Cache использует метод Cache::get() для извлечения элементов из кеша. Если элемент не существует в кеше, то будет возвращен null. При желании вы можете передать методу второй аргумент - значение по умолчанию, который вы хотите вернуть, если элемент не существует:

$value = Cache::get('key');
$value = Cache::get('key', 'default');

Вы даже можете передать функцию в качестве значения по умолчанию. Результат выполнения которой будет будет возвращен, если указанный элемент не существует в кеше. Передача функции позволяет отложить получение значений по умолчанию из базы данных или другого внешнего сервиса:

$value = Cache::get('key', function () {
return DB::table(/* ... */)->get();
});

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

Метод Cache::has() может использоваться для определения того, существует ли элемент в кэше. Этот метод также вернет значение, false если элемент существует, но его значение равно null:

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

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

Методы Cache::increment() и Cache::decrement() могут использоваться для корректировки значения целочисленных элементов в кэше. Оба этих метода принимают необязательный второй аргумент, указывающий величину, на которую следует увеличить или уменьшить значение элемента:

// Установка значения, если оно не существует.....
Cache::add('key', 0, now()->addHours(4));
// Увеличение или уменьшение значения...
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);

Получить и сохранить

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

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

Если элемент не существует в кеше, то будет выполнена функция, переданная методу, и его результат будет помещен в кеш.

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

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

Получить и удалить

Если вам нужно извлечь элемент из кеша, а затем удалить его, вы можете использовать метод Cache::pull(). Как и при использовании метода Cache::get(), будет возвращён null, если элемент не существует в кеше:

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

Хранение элементов в кэше

Вы можете использовать метод Cache::put() на для хранения элементов в кеше:

Cache::put('key', 'value', $seconds = 10);

Если в метод Cache::put() не передать время хранения, элемент будет храниться бесконечно долго:

Cache::put('key', 'value');

Вместо того, чтобы передавать количество секунд в виде целого числа, вы также можете передать экземпляр, DateTime представляющий желаемое время истечения срока действия кэшированного элемента:

Cache::put('key', 'value', now()->addMinutes(10));

Сохранить, если нет

Метод Cache::add() добавит элемент в кеш, только если он еще не существует в хранилище кеша. Метод вернется true, если элемент действительно добавлен в кеш. В противном случае метод вернет false.

Cache::add('key', 'value', $seconds);

Сохранение элементов в кэше навсегда

Метод Cache::forever() может использоваться для постоянного хранения элемента в кэше. Поскольку срок действия этих элементов не истекает, их необходимо удалить из кеша вручную, используя метод Cache::forget()

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

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

Вы можете удалить элементы из кеша, используя метод Cache::forget():

Cache::forget('key');

Вы также можете удалить элементы, указав нулевое или отрицательное число секунд истечения срока действия:

Cache::put('key', 'value', 0);

Cache::put('key', 'value', -5);

Вы можете очистить весь кеш, используя метод Cache::flush():

Cache::flush();

Использование функций

В дополнение к использованию помощника Cache вы также можете использовать глобальную функцию cache для извлечения и сохранения данных через кеш. Когда cache функция вызывается с одним аргументом, она возвращает значение данного ключа:

$value = cache('key');

Если вы предоставите функции массив пар ключ/значение и время истечения срока действия, она будет хранить значения в кеше в течение указанного времени:

cache(['key' => 'value'], $seconds);

cache(['key' => 'value'], now()->addMinutes(10));

Когда cache функция вызывается без каких-либо аргументов, она возвращает экземпляр помощника Cache, что позволяет вызывать другие методы кэширования:

cache()->remember('users', $seconds, function () {
return DB::table('users')->get();
});