Рубрики
Uncategorized

Оптимизация производительности Yii2: зависимость от кэша

Автор оригинала: David Wong.

Зависимость кэша в Yii заключается в том, чтобы просто привязать кэш к другой вещи, и если что-то изменится, кэш также изменится. Это немного похоже на запуск событий в JS (но не так сильно), и изменения в кэшировании вызваны зависимостями.

Зависимости могут быть файлами, базами данных или даже выражениями. Это очень мощно.

Yii предоставляет пять методов зависимостей, и здесь мы представляем три часто используемые зависимости.

1. Зависимость от документа

Как следует из названия, он связывает кэш и файлы вместе. Если содержимое файла изменится, это повлияет на кэш. (Критерий Yii-время последнего изменения документа)

Мы проиллюстрируем этот процесс примерами.

1. Сначала получите компонент кэша

$cache = \Yii::$app->cache;

2. Экземпляр Файловая зависимость Класс (где имя файловой зависимости: Имя файла В то же время назначьте его переменным $dependency . Здесь мы будем кэшировать и yanying.txt Документы связаны, если yanying.txt Если содержимое изменится, соответствующий кэш будет недействительным и недоступным.

$dependency = new \yii\caching\FileDependency(['fileName'=>'yanying.txt']);

3. Давайте добавим один в кэш ключ с помощью file_key Ему присваивается значение hello world . В то же время установите время истечения срока действия равным 3000 секундам и запишите в нем последний параметр. $зависимость Зависимость.

$cache->add('file_key','hello world',3000,$dependency);

4. В течение 3000 секунд мы обновим веб-страницу. Всегда доступен файловый ключ Значение привет, мир

$cache->get('file_key'); // hello world

5. В это время мы меняемся. yanying.txt Значение в файле. Хотя срок действия кэша еще не истек, мы не можем получить значение кэша. Кэш становится недействительным, так как зависимые файлы изменились.

var_dump($cache->get('file_key')); // false

2. Зависимость Выражения

Зависимость выражения-это зависимость, которая связывает значение после операции выражения с кэшем. Когда значение выражения изменится, это повлияет на кэш.

1. Там же. Получить Компоненты Кэша

$cache = \Yii::$app->cache;

2. Экземпляр Зависимость выражения Класс (имя зависимости выражения: выражение В то же время назначьте его переменным $dependency . Здесь зависимость от выражения отличается от зависимости от файла. выражение Соответствующее есть \Yii::$app->запрос->get("идентификатор") – это значение идентификатора в прямой ссылке get (выражение здесь является выражением PHP, а не ограничивается кодом YII).

$dependency = new \yii\caching\ExpressionDependency(['expression'=>'\Yii::$app->request->get("id")']);

3. Давайте добавим один в кэш ключ с помощью file_key Значение равно hello world . В то же время, после установки времени истечения срока действия на 3000 секунд, последний параметр записывается в $dependence Зависимость.

$cache->add('file_key','hello world',3000,$dependency);

4. В течение 3000 секунд мы обновим веб-страницу. Там же, мы можем получать его все время. файловый ключ Значение привет, мир

$cache->get('file_key'); // hello world

5. В этот момент мы меняем ссылку id На значение. Итак: \Yii::$app->запрос->получить("идентификатор") Полученное значение изменится, и кэш выйдет из строя. Кэшированные значения не могут быть получены одновременно.

var_dump($cache->get('file_key')); // false

3. Зависимость от ДБ

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

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

1. Прежде всего, получите компонент кэша

$cache = \Yii::$app->cache;

2. Экземпляр Зависимость от Бд Класс (имя зависимости бд: sql). В то же время назначьте его переменным $dependency . среди sql Соответствующее значение представляет собой непосредственно выполняемую инструкцию SQL.

$dependency = new \yii\caching\DbDependency(['sql'=>'SELECT COUNT(*) FROM user']);

3. Давайте добавим один в кэш ключ с помощью file_key Значение равно hello world . В то же время, после установки времени истечения срока действия на 3000 секунд, последний параметр записывается в $dependence Зависимость.

$cache->add('file_key','hello world',3000,$dependency);

4. Если предположить, что данные базы данных не изменились, кэш не изменится за 3000 секунд. Мы можем получить значение непосредственно из следующего кода hello world .

$cache->get('file_key'); // hello world

5. В это время, если в базу данных будут добавлены новые данные, кэш будет недействителен и не может быть извлечен. Здесь критерием зависимости SQL является результат запроса, здесь мы используем количество записей, вы также можете использовать его напрямую. выберите * из таблицы Если результаты изменятся, это повлияет на кэш.

var_dump($cache->get('file_key')); // false

В это время мы также можем с радостью извлекать значения базы данных и создавать новые кэши.