Как сделать недействительным значение Memcached при обновлении цены продукта в моем пользовательском модуле PrestaShop 1Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Как сделать недействительным значение Memcached при обновлении цены продукта в моем пользовательском модуле PrestaShop 1

Сообщение Гость »


Я использую мультимагазин Prestashop 1.7. В одном из магазинов НДС включен, а в другом нет. Я создал собственный модуль, который подключается к хуку updateproduct. В этом модуле я обновляю цену товара, но только для магазина без НДС. Это гарантирует, что в обоих магазинах будут одинаковые окончательные цены.

Для повышения производительности я использую Memcached. Но я изо всех сил пытаюсь правильно аннулировать кеш. Как только значение для магазина без НДС кэшируется (то, которое я изменяю в своем модуле), оно никогда не меняется после попытки установить его снова в администраторе продукта. В базе данных оно изменяется правильно, но Memcached извлекает старое значение. Как я могу сделать недействительным или обновить сохраненное значение в Memcached? Я также понятия не имею, как получить правильный ключ Memcached, поскольку это хэш, например, ps_288e7d9f7adabca7ca488166fced130a.

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

Cache::getInstance()->delete('*'); Это моя упрощенная функция-перехватчик для обновления цены:

частная функция updateProductPrice($params) { $id_product = $params['id_product']; $price = $params['product']->цена; $id_tax_rules_group = $params['product']->id_tax_rules_group; $shop_ids = $this->getShopIds(); $tax_rate = $this->getTaxRate($id_tax_rules_group); foreach ($shop_ids как $shop_id) { $is_tax = Configuration::get('PS_TAX', null, null, $shop_id); $sql = 'ВЫБРАТЬ `цену` ОТ `` . _DB_PREFIX_ . 'продукт' ГДЕ `id_product` = ' . (целое) $id_product; $base_price = (float)Db::getInstance()->getValue($sql); если (!$is_tax) { $new_price = $base_price * (100 + $tax_rate) / 100; Db::getInstance()->update('product_shop', ['price' => $new_price], 'id_product = '.(int)$id_product . ' AND id_shop = '.(int)$shop_id); } } } Без включения Memcached все работает нормально.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»