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

Правильно-ли закэшировал запрос?


BuslikDrev

Recommended Posts

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

 

Мой запрос без кэша:

  Показать содержимое

 

Мой запрос с кэшем:

  Показать содержимое

 

Ссылка на комментарий
Поделиться на других сайтах

Ответ получил, в общем неизбежно, будет много файлов кэша в зависимости от условий. В итоге, если есть какие-то условия, то меняем название кэша, тем самым создавая новый файл кэша при таком-то условии.

В общем такой код выходит:
 

  Показать содержимое

 

Ссылка на комментарий
Поделиться на других сайтах

Добрый день.

Зачем изобретать велосипед. Пример кода из модели ocStrore 2.3

$manufacturer_data = $this->cache->get('manufacturer.' . (int)$this->config->get('config_language_id').'.'. (int)$this->config->get('config_store_id'));

if (!$manufacturer_data) {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) LEFT JOIN " . DB_PREFIX . "manufacturer_description md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = '" . (int)$this->config->get('config_language_id') . "' && m2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY md.name");

    $manufacturer_data = $query->rows;

    $this->cache->set('manufacturer.' . (int)$this->config->get('config_language_id') . '.'. (int)$this->config->get('config_store_id'), $manufacturer_data);
}

return $manufacturer_data;

P.S.: В штатном функционале запросы с параметрами не кешируются. Что бы кэш не рос бешенными темпами.

Ссылка на комментарий
Поделиться на других сайтах

  В 14.05.2018 at 10:55, mpn2005 сказал:

Добрый день.

Зачем изобретать велосипед. Пример кода из модели ocStrore 2.3

$manufacturer_data = $this->cache->get('manufacturer.' . (int)$this->config->get('config_language_id').'.'. (int)$this->config->get('config_store_id'));

if (!$manufacturer_data) {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "manufacturer m LEFT JOIN " . DB_PREFIX . "manufacturer_to_store m2s ON (m.manufacturer_id = m2s.manufacturer_id) LEFT JOIN " . DB_PREFIX . "manufacturer_description md ON (m.manufacturer_id = md.manufacturer_id) WHERE md.language_id = '" . (int)$this->config->get('config_language_id') . "' && m2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY md.name");

    $manufacturer_data = $query->rows;

    $this->cache->set('manufacturer.' . (int)$this->config->get('config_language_id') . '.'. (int)$this->config->get('config_store_id'), $manufacturer_data);
}

return $manufacturer_data;

P.S.: В штатном функционале запросы с параметрами не кешируются. Что бы кэш не рос бешенными темпами.

Expand  

 

Я вопрос решил, думал, как поступить с параметром $parent_id он может быть равен 0 и id категории.
В итоге я склоняюсь к кэшированию массивов, но попробую ещё и страницы закэшировать целиком, в модуле просто сделаю выбор для пользователя, какой вариант кэша он хочет использовать и выведу размер кэша.

Здесь мои конечные варианты:

 

Ссылка на комментарий
Поделиться на других сайтах

  В 14.05.2018 at 18:26, BuslikDrev сказал:

Я вопрос решил, думал, как поступить с параметром $parent_id он может быть равен 0 и id категории.
В итоге я склоняюсь к кэшированию массивов, но попробую ещё и страницы закэшировать целиком, в модуле просто сделаю выбор для пользователя, какой вариант кэша он хочет использовать и выведу размер кэша.

Expand  

Всё зависит от задачи.

Если например это меню, то лучше кэшировать сразу целиком в контроллере.

 

Ссылка на комментарий
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу