ERPシステムの残りのAPIからのフルページキャッシュと更新に関するMagento 2のApiに問題があります。 ERPは、APIを使用して在庫、在庫、製品の更新を常に進めています。これにより、製品の更新ごとにキャッシュがフラッシュされ、キャッシュされていないウェブサイトが一貫しています。 FlushCacheByTagsクラスをラップして、残りの呼び出しがキャッシュをフラッシュしないようにしました。これはヒットしているようですが、キャッシュはまだクリアされています。ここにクラスオーバーライドがあります:Magento 2 Rest製品のアップデート時にApiがキャッシュをあまりに頻繁に消去しています
<?php
/**
*
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Namespace\Module\Magento\Framework\App\Cache;
/**
* Automatic cache cleaner plugin
*/
class FlushCacheByTags extends
\Magento\Framework\App\Cache\FlushCacheByTags
{
/**
* @var \Psr\Log\LoggerInterface
*/
protected $_logger;
/**
* FlushCacheByTags constructor.
* @param \Magento\Framework\App\Cache\Type\FrontendPool $cachePool
* @param \Magento\Framework\App\Cache\StateInterface $cacheState
* @param array $cacheList
* @param null $tagResolver
* @param \Psr\Log\LoggerInterface $_logger
*/
public function __construct(
\Magento\Framework\App\Cache\Type\FrontendPool $cachePool,
\Magento\Framework\App\Cache\StateInterface $cacheState,
array $cacheList,
\Psr\Log\LoggerInterface $_logger,
$tagResolver = null
)
{
parent::__construct($cachePool, $cacheState, $cacheList, $tagResolver);
$this->_logger = $_logger;
}
/**
* Clean cache on save object
*
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $subject
* @param \Closure $proceed
* @param \Magento\Framework\Model\AbstractModel $object
* @return \Magento\Framework\Model\ResourceModel\AbstractResource
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundSave(
\Magento\Framework\Model\ResourceModel\AbstractResource $subject,
\Closure $proceed,
\Magento\Framework\Model\AbstractModel $object
) {
$this->_logger->debug('CACHE SAVE - instance of: '. print_r(get_class($object),true));
if (
// is instance of
/* @var $object \Magento\Catalog\Model\Product */
$object instanceof \Magento\Catalog\Model\Product
&& (
// is rest api request
isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'],'/rest') === 0
)
&& (
// has data
!empty($object->getData())
)
) {
$this->_logger->debug('Cache NOT flushed from API SKU#: '.print_r($object->getSku(),true));
return $proceed($object);
}
return parent::aroundSave($subject, $proceed, $object);
}
/**
* Clean cache on delete object
*
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $subject
* @param \Closure $proceed
* @param \Magento\Framework\Model\AbstractModel $object
* @return \Magento\Framework\Model\ResourceModel\AbstractResource
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function aroundDelete(
\Magento\Framework\Model\ResourceModel\AbstractResource $subject,
\Closure $proceed,
\Magento\Framework\Model\AbstractModel $object
) {
$this->_logger->debug('CACHE DELETE - instance of: '. print_r(get_class($object),true));
if (
// is instance of
/* @var $object \Magento\Catalog\Model\Product */
$object instanceof \Magento\Catalog\Model\Product
&& (
// is rest api request
isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'],'/rest') === 0
)
){
$this->_logger->debug('Cache NOT flushed from API SKU#: '.print_r($object->getSku(),true));
return $proceed($object);
}
return parent::aroundDelete($subject, $proceed, $object);
}
}
ここに何かが欠けていますか?我々は、APIを介してデータベースにデータをプッシュし、APIを介して製品が更新される毎回ではなく、それ自身の協調でフラッシュを処理できるようにしたいと考えています。キャッシュをウォーマーで実装しようとしていますが、キャッシュを消去する頻度に追いつけません。ここで
は、我々は、Magentoの\ページキャッシュ\オブザーバー\ FlushCacheByTags
\ の上書きを作成し、これを修正するためにAPI
[2017-06-09 21:26:05] report.DEBUG: CACHE SAVE - instance of:
Magento\Catalog\Model\Product\Interceptor {"is_exception":false} []
[2017-06-09 21:26:05] report.DEBUG: Cache NOT flushed from API SKU#:
270876 {"is_exception":false} []
[2017-06-09 21:26:05] report.DEBUG: cache_invalidate {"method":"PUT","url":"https://obscuredforsecurity.com/rest/all/V1/products/270876","invalidateInfo":{"tags":["catalog_product_0"],"mode":"matchingAnyTag"},"is_exception":false} []