Türchen 9: Eigener Cache in Magento 2

Gerade die Daten von performanceintensiven Anfragen sollte man immer cachen, damit der Webshop weiterhin performant für den Kunden bleibt. Für Magento 2 kann man bei Eigenentwicklungen auch einen eigenen Cache anlegen, um die Inhalte thematisch mehr vom Magento-Cache zu trennen. Genau das zeigen wir dir in diesem Türchen!

Anlegen der cache.xml

Um einen eigenen Cache anzulegen, fangen wir mit dem Erstellen einer cache.xml im „etc“ Ordner eines Moduls an. Dort definieren wir ein Cache-Model:

<!-- etc/cache.xml in einem Modul -->
<?xml version="1.0"?>
<config [...]>
  <type
    name="customer_price"
    instance="Codex\Price\Model\Cache\Price"
  >
    <label>Customer Price</label>
    <description>Customer Price</description>
  </type>
</config>

Cache Model

Nachdem wir das Model in der cache.xml eingebunden haben, füllen wir den Inhalt der „Model/Cache/Price.php“ wie folgt:

/*
 * Implementierung des Cache-Type Models in
 * der Model/Cache/Price.php Datei
 */

<?php
namespace Codex\Customer\Model\Cache;

use Magento\Framework\Cache\Frontend\Decorator\TagScope;
use Magento\Framework\App\Cache\Type\FrontendPool;
use Magento\Framework\Config\CacheInterface;

class Price extends TagScope implements CacheInterface
{
  const TYPE_IDENTIFIER = 'customer_price';
  const CACHE_TAG = 'CUSTOMER PRICE';

  public function __construct (
    FrontendPool $cacheFrontendPool
  ) {
    parent::__construct(
      $cacheFrontendPool
        ->get(self::TYPE_IDENTIFIER),
      self::CACHE_TAG
    );
  }
}

Cache schreiben

Nun haben wir den Cache an sich schon angelegt und können uns mit den verschiedenen, notwendigen Funktionen beschäftigen, die wir benötigen. Unter anderem das Schreiben in den Cache:

/*
  * Speichern des Kundenpreises im Cache unter
  * dem Key 'customer_price'
  */

<?php
use Magento\Framework\App\CacheInterface;
use Codex\Price\Model\Cache\Price;

class Save
{
  private CacheInterface $cache;

  public function __construct (
    CacheInterface $cache
  ) {
    $this->cache = $cache;
  }

  public function save(): void {
    $data = [
      'customer_number' => '1',
      'sku' => 'abc',
      'price' => 2.57
    ];

    $this->cache->save(
      serialize($data),
      Price::TYPE_IDENTIFIER,
      [Price::CACHE_TAG]
    );
  }
}

Cache lesen

Neben dem Speichern in den Cache ist natürlich der zweite Schritt das Auslesen von Werten aus dem Cache:

// Lesen des Kundenpreises aus dem Cache

<?php
use Magento\Framework\App\CacheInterface;
use Codex\Price\Model\Cache\Price;

class Load
{
  private CacheInterface $cache;

  public function __construct (
    CacheInterface $cache
  ) {
    $this->cache = $cache;
  }

  public function load(): void {
    $cachedData = $this->cache->load(Price::TYPE_IDENTIFIER);

    $data = unserialize($cachedData);
  }
}

Cache löschen

Was fehlt neben schreiben und lesen noch? Ihr habt’s ja eh schon gelesen… löschen!

// Löschen des Kundenpreises aus dem Cache

<?php
use Magento\Framework\App\CacheInterface;
use Codex\Price\Model\Cache\Price;

class Remove
{
  private CacheInterface $cache;

  public function __construct(
    CacheInterface $cache
  ) {
    $this->cache = $cache;
  }

  public function remove(): void {
    $cachedData = $this->cache->remove(Price::TYPE_IDENTIFIER);
  }
}

Wir hoffen, dass euch die kurzen Code-Beispiele geholfen haben euren eigenen Cache anzulegen 🙂

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert