_cache = $cache; $this->_fetchStrategy = $fetchStrategy; $this->_cacheIdPrefix = $cacheIdPrefix; $this->_cacheTags = $cacheTags; $this->_cacheLifetime = $cacheLifetime; $this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class); } /** * {@inheritdoc} */ public function fetchAll(Select $select, array $bindParams = []) { $cacheId = $this->_getSelectCacheId($select); $result = $this->_cache->load($cacheId); if ($result) { $result = $this->serializer->unserialize($result); } else { $result = $this->_fetchStrategy->fetchAll($select, $bindParams); $this->_cache->save( $this->serializer->serialize($result), $cacheId, $this->_cacheTags, $this->_cacheLifetime ); } return $result; } /** * Determine cache identifier based on select query * * @param \Magento\Framework\DB\Select|string $select * @return string */ protected function _getSelectCacheId($select) { return $this->_cacheIdPrefix . md5((string)$select); } }