Magento 2: comment créer votre propre type de cache personnalisé?

10

Dans Magento 1, il était possible de créer votre propre type de cache en déclarant ce qui suit dans votre 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>

Il en résultera un nouveau type de cache ajouté au backend sous Système> Gestion du cache et ainsi, il ajoutera la possibilité de vider le cache lié à la CUSTOM_CACHE_TAGbalise de cache.

Est-ce possible en M2 et comment y parvenir?

Raphael chez Digital Pianism
la source
Pour un exemple d'implémentation de la réponse acceptée, voir: magento.stackexchange.com/questions/150074/…
RikW
Pour un exemple d'implémentation de la réponse acceptée, voir: magento.stackexchange.com/questions/150074/…
RikW

Réponses:

19

C'est ci-dessous une structure de base pour créer un type de cache personnalisé,

créer un module avec,

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);
    }
}

Merci.

Rakesh Jesadiya
la source
7
Ce serait formidable si vous pouviez dire comment utiliser le cache. Je veux dire comment ajouter, supprimer, vérifier les éléments du cache.
Arvind07
si quelqu'un sait comment stocker et obtenir des données de cache, ce serait bien. S'il vous plaît
Arshad Hussain
2

Voudrait modifier le commentaire accepté de Rakesh, mais a été rejeté ....

Quoi qu'il en soit, voici quelques modifications, des informations supplémentaires à la bonne réponse de Rakesh:

Le cache.xml doit être légèrement modifié:

<?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>

Le nom doit donc correspondre au cache_tag.

Comment l'utiliser, regardez ici: Utilisation du cache personnalisé de Magento 2 dans le module personnalisé

Pour utiliser les données (après avoir été mises en cache), vous devez les désérialiser:

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