我写了一个cron作业,检查库存数量的变化,已直接在数据库中,因此绕过Magento核心,这将处理到期该高速缓存。
我希望能够以以下方式使用对象管理器:
public function clearCacheforProduct($productID) {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->get('\Magento\Framework\App\Cache\Manager');
$cacheManager->clean('catalog_product_' . $productID);
}
当cron作业运行时,此操作当前会以静默方式失败。
如何清除该高速缓存中的单个产品ID?
4条答案
按热度按时间lf3rwulv1#
感谢@bxN5。我设法在那里得到一些错误日志,并很快发现
cacheManager
的命名空间有点错误。正确代码为:
对于那些使用Magento运行Varnish的人来说,也有必要清除那里的数据,并且Magento调用似乎没有完全完成。所以我添加了一个cURL请求来完成特定的清除:
请确保在Varnish配置文件中正确设置了清除权限。
e37o9pze2#
如果您查看
\Magento\InventoryCache\Model\FlushCacheByProductIds
,您将看到以下方法(Magento 2.2.3):有了DI的支持,我会选择尽可能使用核心代码,而不是使用自己的代码。
cdmah0mi3#
我发现的最好的方法就是使用这个代码
请在构造函数中初始化objectManager和ProductRepository
我现在用这种方法,它是工作一样的魅力
zi8p0yeb4#
您只需加载产品对象并调用cleanCache()
首先像这样初始化$this-〉productRepository:
然后在代码中调用: