Magento 2: Wie erstelle ich einen eigenen Cache-Typ?

10

In Magento 1 war es möglich, einen eigenen Cache-Typ zu erstellen, indem in Ihrem Verzeichnis Folgendes deklariert wurde config.xml:

<global>
    <cache>
        <types>
            <custom translate="label,description" module="module">
                <label>Custom Cache</label>
                <description>This is my custom cacge</description>
                <tags>CUSTOM_CACHE_TAG</tags>
            </custom >
        </types>
    </cache>
</global>

Dies führt zu einem neuen Cache-Typ, der dem Backend unter System> Cache-Verwaltung hinzugefügt wird, und bietet somit die Möglichkeit, den Cache in Bezug auf das CUSTOM_CACHE_TAGCache-Tag zu leeren.

Ist das in M2 möglich und wie kann man das erreichen?

Raphael beim digitalen Pianismus
quelle
Eine Beispielimplementierung der akzeptierten Antwort finden Sie unter: magento.stackexchange.com/questions/150074/…
RikW
Eine Beispielimplementierung der akzeptierten Antwort finden Sie unter: magento.stackexchange.com/questions/150074/…
RikW

Antworten:

18

Im Folgenden finden Sie einige grundlegende Strukturen zum Erstellen eines benutzerdefinierten Cache-Typs.

Erstellen Sie ein Modul mit,

app/code/Vendor/Cachetype/etc/cache.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Cache/etc/cache.xsd">
    <type name="custom_cache" translate="label,description" instance="Vendor\Cachetype\Model\Cache\Type">
        <label>Custom Cache type</label>
        <description>Custom cache description.</description>
    </type>
</config>

app/code/Vendor/Cachetype/i18n/en_US.csv

"Custom cache description.","Custom cache description."
"cachetype","Cache type"

app/code/Vendor/Cachetype/Model/Cache/Type.php

<?php
namespace Vendor\Cachetype\Model\Cache;

/**
 * System / Cache Management / Cache type "Custom Cache Tag"
 */
class Type extends \Magento\Framework\Cache\Frontend\Decorator\TagScope
{
    /**
     * Cache type code unique among all cache types
     */
    const TYPE_IDENTIFIER = 'custom_cache_tag';

    /**
     * Cache tag used to distinguish the cache type from all other cache
     */
    const CACHE_TAG = 'CUSTOM_CACHE_TAG';

    /**
     * @param \Magento\Framework\App\Cache\Type\FrontendPool $cacheFrontendPool
     */
    public function __construct(\Magento\Framework\App\Cache\Type\FrontendPool $cacheFrontendPool)
    {
        parent::__construct($cacheFrontendPool->get(self::TYPE_IDENTIFIER), self::CACHE_TAG);
    }
}

Vielen Dank.

Rakesh Jesadiya
quelle
7
Es wäre großartig, wenn Sie wissen könnten, wie der Cache verwendet wird. Ich meine, wie man Cache-Elemente hinzufügt, löscht und überprüft.
Arvind07
Wenn jemand weiß, wie man Cache-Daten speichert und abruft, wäre das großartig. Bitte
Arshad Hussain
1

Möchte Rakesh akzeptierten Kommentar bearbeiten, wurde aber abgelehnt ....

Sowieso hier einige Modifikationen, zusätzliche Infos zur guten Antwort von Rakesh:

Die Datei cache.xml muss ein wenig geändert werden:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="urn:magento:framework:Cache/etc/cache.xsd">
<type name="custom_cache_tag" translate="label,description" instance="Vendor\Cachetype\Model\Cache\Type">
        <label>Custom Cache type</label>
        <description>Custom cache description.</description>
    </type>
 </config>

Der Name muss also mit dem cache_tag übereinstimmen.

Informationen zur Verwendung finden Sie hier: Verwenden des benutzerdefinierten Magento 2-Cache im benutzerdefinierten Modul

Um die Daten (nach dem Zwischenspeichern) zu verwenden, müssen Sie sie unserialisieren:

$data = unserialize($this->_cacheType->load($cacheKey));
Mo3bius
quelle