Shopware 5

Shopware 5 - Redis

In dem Artikel schreibe ich, wieso es sinnvoll ist Redis für Shopware zu verwenden.
Standardmäßig wird zur Kompatibilität kein Redis verwendet, Redis muss vor der Nutzung jedoch installiert werden!

Folgende Bereiche können über Redis gesteuert werden:

  1. Sessions
  2. Models
  3. Cache
  4. HTTP-Cache*

Redis

Redis ist ein key value store bzw. eine NoSQL Datenbank. Sämtliche Daten liegen dabei im Arbeitsspeicher und es ist einfach sehr sehr schnell.

Maxcluster hat eine umfangreiche Blog-Serie über Redis geschrieben, in der vieles informatives steht:
  ▹ https://maxcluster.de/blog/2019/09/redis-teil-1-performance-optimierung-f%C3%BCr-shopware-und-magento

Installation

Redis muss vor der Nutzung installiert werden:
  ▹ https://tecadmin.net/install-redis-ubuntu/
  ▹ Profihost: Bitte ein kurzes Ticket erstellen, mit der Info wofür Redis genutzt werden soll. :) (ab Managed Server)

Damit PHP kann mit Redis umgehen kann, muss in der php.ini die Extension geladen werden:
extension=redis.so

Instanzen

Ich empfehle mindestens zwei Instanzen zu nutzen ein um die Sessions vom Cache Gedöns getrennt zu haben.
Hintergrund ist, dass Redis standardmäßig alle paar Minuten eine Sicherung erstellt um bei einem Ausfall Daten wiederherstellen zu können.
Dies wollen wir bei Sessions auch auf jeden Fall haben!
Der Cache hingegen kann verloren gehen, dass ist nicht tragisch und wir sparen Festplattenressourcen ein.

Sollten nicht mit mehreren Instanzen gearbeitet werden können, sollten die Inhalte über einen Prefix selektiert werden. In der Sessions Konfiguration ist ein Beispiel.

Nun aber zu den einzelnen Themen:

1. Sessions

Das Verwenden von Shopware 5.6 oder älter von Redis für Sessions ist ein Must-have!
Shopware Shops können massive Performance Probleme erleiden, da MySQL/MariaDB mit Session Queries verstopft wird.
Es ist mit einer häufigsten Gründe, warum ein Shop inperformant ist.

Folgende Konfiguration muss in die config.php gesetzt werden:

    // Sessions
    'session' => array(
        'save_handler' => 'redis',
        'save_path' => '/home/tmp/redis.sock?prefix=PHPREDIS_FRONTEND_SESSION:',
    ),

    'backendsession' => array(
        'save_handler' => 'redis',
        'save_path' => '/home/tmp/redis.sock?prefix=PHPREDIS_BACKEND_SESSION:',
    ),

Wichtig: Bei allen Konfigurationen werden die Socket Pfade von Profihost verwendet. Dieser muss ggf. abgeändert werden, ggf. kann auch kein Socket genutzt werden womit TCP/IP verwendet werden muss.

Shopware Dokumentation:

  ▹ https://developers.shopware.com/sysadmins-guide/sessions/#redis

2. Models

Im Vergleich zu Sessions sehe ich Models & Cache hingegen als optional an.
Ich habe hier keine aussagekräftigen Erfahrungen gemacht, dass die Umstellung auf Redis Performance Vorteile brachte oder entsprechende Tests durchgeführt. Shopware hat dazu auch kaum Dokumentation.

Bei Shops denen Performance sehr wichtig ist, aktiviere ich es in der Regel.

    // Model-Cache
    'model' => [
        'redisHost' => '/home/tmp/redis-models.sock',
        'redisPort' => 0,
        'redisDbIndex' => 0,
        'cacheProvider' => 'redis'
    ],

"Dokumentation":
  ▹ https://developers.shopware.com/developers-guide/shopware-config/#redis-configuration

3. Cache

Hier gilt selbiges wie bei den Models. :)

    // Cache
    'cache' => [
        'backend' => 'redis',
        'backendOptions' => [
            'servers' => [
                [
                    'host' => '/home/tmp/redis-bcache.sock',
                    'port' => 0,
                    'dbindex' => 0,
                    'redisAuth' => '',
                    'redisPersistent' => 'true'
                ],
            ],
        ],
    ],

"Dokumentation":
  ▹ https://developers.shopware.com/developers-guide/shopware-config/#redis-configuration

4. HTTP-Cache*

* Der HTTP-Cache kann ausschließlich mit der Enterprise Lizenz aktiviert werden.

Der Bereich hier kommt für die meisten Kunden leider nicht in Frage, daher betrachte ich den wenig.

Interessanter Artikel:
  ▹ https://www.the-cake-shop.de/shopware-enterprise-redis-http-cache/

Dokumentation:
  ▹ https://docs.enterprise.shopware.com/performance/essentials/