Закешировать getFilterBlock

Автор kdvbpspr, 01 июня 2021, 15:59:37

« назад - далее »

kdvbpspr

Добрый день,

В модуле blocklayered есть метод getFilterBlock. Здесь сосредоточена вся логика формирования фильтров.
Запрос для получение данных получается достаточно тяжёлый.

Поэтому я хочу использовать Cache.

Проблема в формировании ключа кеша,
т.к. в самом запросе много параметров.

Случайно не сталкивались с подобным?

kdvbpspr

Как то так или есть другие варианты?

public function getFilterBlock($selected_filters = array())
    {
        ......

        $cacheKey = 'getFilterBlock'.md5(serialize($selected_filters));

Mr.Sen

У вас версия prestashop какая?
В модуле многоуровневой навигации для prestashop 1.7 есть кеширование запросов.

tigran

Цитата: Mr.Sen от 02 июня 2021, 10:54:56
У вас версия prestashop какая?
В модуле многоуровневой навигации для prestashop 1.7 есть кеширование запросов.
И в blocklayered для prestashop 1.6 кешируются запросы
public function getFilterBlock($selected_filters = array())
{
    ...
    if (is_array($cache))
return $cache;

Зачем повторять кеширование?
Если вам sql запросы нужно кешировать, то это настраивается на стороне сервера.
А в prestashop все запросы кешируются по умолчанию
Метод execute($sql, $use_cache = 1) класса DB

kdvbpspr

#4
Что касается $cache, то
static $cache = null;

, это старый добрый трюк с кэшированием в статической переменной.

У меня реализована возможность использовать кеширование Memcached не для всего сайта, а для конкретного случая.
Сделал как описано здесь:
https://prestafaq.ru/103/%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D1%81%D0%BB%D0%B5%D0%B4%D1%83%D0%B5%D1%82-%D0%BE%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-%D0%BA%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B2-prestashop

Мне нужно кешировать в модуле blocklayered результат метода getFilterBlock.
Где сосредоточена вся логика формирования фильтров, в том числе через CREATE TEMPORARY TABLE,
аргумент $use_cache установлен в false.

Просто посмотрел лог mysql по медленным запросам с сервера,
и увидел, что самый медленный запрос формируется именно в методе getFilterBlock.

Других вариантов как ускорить этот процесс я не вижу.
Что скажете?
В наличии P.S. 1.6