Кеширование моделей в Laravel

Laravel Model Caching - без сомнения пакет заслуживающий вашего внимания.

Кеширование моделей в Laravel

С тех пор, как из Laravel удалили возможность автоматического кеширования моделей, мы все пилим свои велосипеды. И вот нашелся тот, кто запилил достойный велосипед, который не стыдно показать людям.

Основные "фичи"

  • Автоматическое, само-инвалидирующиеся кеширование связей (включая lazy и eager-loaded)
  • Автоматическое, само-инвалидирующиеся кеширвоание запросов
  • Автоматическое использование механизма cache tags, для тех провайдеров которые его поддерживают.

Требования

  • PHP >=7.1.3
  • Laravel >=5.5.0

Установка

$ composer require genealabs/laravel-model-caching

Настройка

Кастомный драйвер для кеша

Если вы хотите использовать другой драйвер для кеша (не тот который используете по-умолчанию в проекте), то просто установите переменную окружения (env variable) MODEL_CACHE_STORE (можно использовать имя любого драйвера кеша который вы настроили в config/cache.php) в вашем .env файле. Например:

MODEL_CACHE_STORE=redis

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

Для лучшей производительности используйте хранилище кеша, которое поддерживает механизм тегирования (redis, memcached). Хотя это и не обязательно, но это очень сильно скажется на производительности. При использовании драйвера которые не имеет механизма тегов - будет сбрасываться весь кеш, при каждом создании, обновлении, удалении модели.

Для простоты, рекомендую сделать абстрактную модель BaseModel, которая наследует CachedModel, и которую будут наследовать все ваши модели.

// BaseModel.php


use GeneaLabs\LaravelModelCaching\CachedModel;

abstract class BaseModel extends CachedModel
{
  //
}

Исключение: модель User

Я не рекомендую использовать кеширование для дефолтовой модели User. Это вызовет больше проблем, чем принесет пользы. Модель User наследует Illuminate\Foundation\Auth\User и измененение чего-либо будет большой проблемой.

Отключение кеширования

Если вам нужно отключить кеширование для конкретного запроса, то используйте метод disableCache():

$results = $myModel->disableCache()->all();

Ручной сброс кеша для конкретной модели

Вы можете вручную сбросить кеш для конкретной модели с помощью artisan комнды:

$ php artisan modelCaching:flush --model=App\Model

Заключение

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

На этом все. Более подробную информацию читайте на Github данного пакета. Спасибо что читали!

Опубликовано: