Кэширование запросов к БД на время жизни приложения
Кэширование запросов к БД на время жизни приложения
Здравствуйте!
Есть ли возможность класть запросы в кэш, только на время lifecycle приложения?
Например, есть метод в классе, который делает запрос к базе и возвращает определённые данные. Я его дёргаю в разных местах в приложении и хочу, чтобы не было лишних запросов к базе.
Есть ли возможность класть запросы в кэш, только на время lifecycle приложения?
Например, есть метод в классе, который делает запрос к базе и возвращает определённые данные. Я его дёргаю в разных местах в приложении и хочу, чтобы не было лишних запросов к базе.
Re: Кэширование запросов к БД на время жизни приложения
Да думал про это, может указывать секунды 3. Но думаю, что как-то костыльно это.
Re: Кэширование запросов к БД на время жизни приложения
закэшируйте эти определённые данные в стат свойстве класса, если они не меняются за время жизни конечно, а обращение к системе кэша в любом случае не такая уж легкая операция, как минимум это включает десериализациюPendalF писал(а):Здравствуйте!
Есть ли возможность класть запросы в кэш, только на время lifecycle приложения?
Например, есть метод в классе, который делает запрос к базе и возвращает определённые данные. Я его дёргаю в разных местах в приложении и хочу, чтобы не было лишних запросов к базе.
Re: Кэширование запросов к БД на время жизни приложения
Типа такого?
Код: Выделить всё
class ApartmentsCountProvider extends Object
{
/**
* @var array хранит результаты запросов
*/
protected static $cache;
public function getCount()
{
if (!isset(self::$cache[__METHOD__])) {
self::$cache[__METHOD__] = Yii::$app->rb->createCommand('ЗАПРОС')->queryScalar();
}
return self::$cache[__METHOD__];
}
}
Re: Кэширование запросов к БД на время жизни приложения
Только в этом случае метод getCount тоже должен быть статичный. Пожалуй, это подойдёт. Спасибо, Ян!
Re: Кэширование запросов к БД на время жизни приложения
ArrayCache - то, что вам нужно.PendalF писал(а):Здравствуйте!
Есть ли возможность класть запросы в кэш, только на время lifecycle приложения?
Например, есть метод в классе, который делает запрос к базе и возвращает определённые данные. Я его дёргаю в разных местах в приложении и хочу, чтобы не было лишних запросов к базе.
Re: Кэширование запросов к БД на время жизни приложения
Проясните мне ситуацию. Я в одном своем проекте в разных местах дергал базу данных для получения разных настроек сайта. Получалось несколько запросов. То есть я мог это где-то один раз закешировать и и оттуда считывать? Имею в виду не разные запросы, а именно во время жизни приложения, в разных частях сайта (на одной странице), виджетах и так далее.zelenin писал(а):ArrayCache - то, что вам нужно.PendalF писал(а):Здравствуйте!
Есть ли возможность класть запросы в кэш, только на время lifecycle приложения?
Например, есть метод в классе, который делает запрос к базе и возвращает определённые данные. Я его дёргаю в разных местах в приложении и хочу, чтобы не было лишних запросов к базе.
Осторожно! Вы общаетесь с новичком
Re: Кэширование запросов к БД на время жизни приложения
даgirmate писал(а):Проясните мне ситуацию. Я в одном своем проекте в разных местах дергал базу данных для получения разных настроек сайта. Получалось несколько запросов. То есть я мог это где-то один раз закешировать и и оттуда считывать? Имею в виду не разные запросы, а именно во время жизни приложения, в разных частях сайта (на одной странице), виджетах и так далее.zelenin писал(а):ArrayCache - то, что вам нужно.PendalF писал(а):Здравствуйте!
Есть ли возможность класть запросы в кэш, только на время lifecycle приложения?
Например, есть метод в классе, который делает запрос к базе и возвращает определённые данные. Я его дёргаю в разных местах в приложении и хочу, чтобы не было лишних запросов к базе.
Re: Кэширование запросов к БД на время жизни приложения
О, в самом деле то что нужно! Спасибо)
Re: Кэширование запросов к БД на время жизни приложения
Только мне не совсем понятно насчёт параметра duration у ArrayCache. Получается, он там нужен для того, чтобы в миллисекундах определить срок кэша (до момента как закончится жизненный цикл приложения), а если поставить 0, то кэш "просрочится", как только будет закончен жизненнный цикл приложения? Верно?
Re: Кэширование запросов к БД на время жизни приложения
Я вот не помню как выкручивался. Кажется передавал в вид и виджеты, общие настройки приложения из БД. Но не везде получалось. А об этом как-то и не задумывался. Спасибо. Теперь я смогу один раз считать все настройки приложения и использовать везде где нужно. Ведь часть настроек касается отображения (например, сколько товаров выводить на страницу), другая часть вообще не связана никак с отображением. Все я загнал в таблицу Settings (всего одна строка и куча полей) и дергал повсюду где надо и не надо. А вот теперь понял что нужно было закешировать один раз где-то и вызывать где нужно.
Осторожно! Вы общаетесь с новичком
Re: Кэширование запросов к БД на время жизни приложения
ArrayCache - такой же кэш как и все остальные, но не сохраняемый в хранилище.PendalF писал(а):Только мне не совсем понятно насчёт параметра duration у ArrayCache. Получается, он там нужен для того, чтобы в миллисекундах определить срок кэша (до момента как закончится жизненный цикл приложения), а если поставить 0, то кэш "просрочится", как только будет закончен жизненнный цикл приложения? Верно?