Redis
Was ist Redis?
Für einen Webshop ist gute Performance ein echter Wettbewerbsvorteil. Damit du deine Ladezeiten weiter minimieren kannst, kannst du in allen Space-Server- und proSpace-Tarifen Redis nutzen. Wozu du die Datenbank verwenden kannst und wie du sie einrichtest, liest du hier.
Redis (kurz für Remote Dictionary Server) ist In-Memory-Datenbank und Key-Value-Store in einem. Das heißt: Anstatt auf der Festplatte werden deine Daten im Arbeitsspeicher abgelegt. Jeder Eintrag erhält seinen eigenen Schlüssel, über den er direkt abgerufen wird. Das sorgt für sehr kurze Zugriffszeiten.
Wozu brauche ich Redis?
Generell gilt: Redis macht deine Projekte schneller, wenn Daten schnell geschrieben und abgefragt werden. Dank der überragenden Performance lässt sich Redis ideal als Cache verwenden. Auch als Session-Storage für Shopsysteme ist die Datenbank beliebt.
Wie erstelle ich eine Redis-Datenbank?
Redis einzurichten ist einfach. Je nach CMS oder Shopsystem musst du jedoch einige Dinge beachten. Ich erkläre dir Schritt für Schritt, wie es geht.
- mStudio UI
- CLI
- API
Um eine Redis-Datenbank im mStudio zu erstellen, folge diesen Schritten:
- Navigiere zu dem Projekt, in dem du die Datenbank erstellen möchtest.
- Wähle im Seitenmenü den Punkt "Datenbanken".
- Klicke auf den Button "Datenbank erstellen" und wähle "Redis".
- Gib eine Beschreibung für die Datenbank ein und wähle die gewünschte Version.
Nachdem die Installation abgeschlossen ist, findest du die Host- und Port-Angaben in den Details unter "Verbindungsinformationen". Diese benötigst du für die Konfiguration deines Systems.
Um eine Redis-Datenbank über die CLI zu erstellen, führe den folgenden Befehl aus:
$ mw database redis create --description "My Redis database" --version 7.2
Nachdem die Installation abgeschlossen ist, nutze den Befehl mw database redis get
, um die Verbindungsinformationen zu sehen.
Um eine Redis-Datenbank über die API zu erstellen, sei auf den Artikel "Erstellen einer Redis-Datenbank über die API" verwiesen.
Redis als Session-Storage für PHP konfigurieren
Die php.ini
-Datei liegt in deinem Projekt unter .config/php/php.ini
. Füge den folgenden Code ein:
extension=redis.so
session.save_handler = redis
session.save_path = "tcp://HOST:PORT?database=15"
Ändere nun du die Variablen HOST
und PORT
. Dafür verwendest du die Angaben aus den Verbindungsinformationen.
Jede Redis Datenbank hat standardmäßig 16 Datenbanken, die von 0 bis 15 angesprochen werden können.
Übliche Anwendungen einrichten
Shopware 6
Die Konfiguration für Redis trägst du in deiner Shopware 6 Installation in der services.yaml
ein. Sie liegt im Verzeichnis /config
. Falls dort noch keine Datei vorhanden ist, legst du diese einfach an. Folgende Zeilen fügst du am Ende der Datei ein:
parameters:
app.redis.cache.host: "%env(REDIS_CACHE_HOST)%"
app.redis.cache.port: "%env(int:REDIS_CACHE_PORT)%"
app.redis.cache.database: "%env(int:REDIS_CACHE_DATABASE)%"
services:
Redis:
class: Redis
calls:
- method: connect
arguments:
- "%env(REDIS_SESSION_HOST)%"
- "%env(int:REDIS_SESSION_PORT)%"
- method: select
arguments:
- "%env(int:REDIS_SESSION_DATABASE)%"
Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler:
arguments:
- "@Redis"
Erstelle nun im Ordner config/packages
die Datei framework.yaml
. In die Datei fügst du Folgendes ein:
framework:
cache:
app: cache.adapter.redis
system: cache.adapter.redis
default_redis_provider: "redis://%app.redis.cache.host%:%app.redis.cache.port%/%app.redis.cache.database%"
session:
handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler
Füge zuletzt Folgendes am Ende der .env
ein:
REDIS_CACHE_HOST="HOST"
REDIS_CACHE_PORT="PORT"
REDIS_CACHE_DATABASE="1"
REDIS_SESSION_HOST="HOST"
REDIS_SESSION_PORT="PORT"
REDIS_SESSION_DATABASE="0"
Shopware 5
Füge im Shopware Verzeichnis in config.php
Folgendes ein:
// Sessions für Backend und Frontend im Redis in der DB2
'session' => [
'save_handler' => 'redis',
'save_path' => 'tcp://HOST:PORT/2',
],
'backendsession' => [
'save_handler' => 'redis',
'save_path' => 'tcp://HOST:PORT/2',
],
// Models Cache im Redis in der DB3
'model' => [
'redisHost' => 'tcp://HOST',
'redisPort' => 'PORT',
'redisDbIndex' => '3',
'cacheProvider' => 'redis',
],
// Shopware Backend Cache im Redis in der DB3
'cache' => [
'backend' => 'redis',
'backendOptions' => [
'servers' => [
[
'host' => 'tcp://HOST',
'port' => 'PORT',
'dbindex' => '3',
],
],
],
],
Joomla 4
In der Joomla Administration hinterlegst du unter System -> Konfiguration -> System bei "Sitzung (Session)" diese Konfiguration:
- Sitzungsspeicher: Redis
- Persistentes Redis: Ja
- Redis-Server Host/Socket: HOST eintragen
- Redis-Port: PORT eintragen
- Redis-Server-Authentifizierung: so belassen
- Redis-Datenbank: Datenbank eintragen
Bei Redis-Datenbank gewünschte freie Datenbank zwischen 0 und 15 wählen, und dann Speichern.
WordPress
Wir empfehlen das Plugin Redis Object Cache. Installiere dieses Plugin zunächst über die WP-CLI
wp plugin install redis-cache --activate
und setze die benötigten Konfigurations-Einträge:
wp config set --type=constant WP_REDIS_PATH HOST
wp config set --type=constant WP_REDIS_PORT PORT
wp config set --type=constant WP_REDIS_DATABASE 0
wp config set --type=constant WP_REDIS_SCHEME unix
- Nutze den
hostname
undport
der Datenbank als Werte fürWP_REDIS_PATH
undWP_REDIS_PORT
(sieheGET https://api.mittwald.de/v2/redis-databases/{id}
) - Wähle eine freie Datenbank zwischen 0 und 15 als Wert für
WP_REDIS_DATABASE
.
Wenn du die WP-CLI nicht benutzen möchtest, kannst du das Plugin auch über das WordPress-Dashboard installieren. Nach der Installation und Aktivierung fügst du der wp-config.php folgende Einträge hinzu:
define('WP_REDIS_PATH', 'HOST');
define('WP_REDIS_PORT', 'PORT');
define('WP_REDIS_DATABASE', '0');
define('WP_REDIS_SCHEME', 'unix');
TYPO3
Für alle Versionen bis TYPO3 11.5 erstellst du eine AdditionalConfiguration.php
im Ordner typo3conf
. Ab TYPO3 Version 12.4 erstellst du eine additional.php
in den Ordnern typo3conf/system
(für Symlink-Installationen) oder config/system
(für Composer-Installationen). Füge das Folgende bitte jeweils ein. Sollte die Datei bereits existieren, kannst du <?php
weglassen.
<?php
$redisHost = 'HOST';
$redisPort = PORT;
$redisCaches = [
'pages' => [
'defaultLifetime' => 86400*7,
'compression' => true,
],
'pagesection' => [
'defaultLifetime' => 86400*7,
],
'hash' => [],
'rootline' => [],
];
$redisDatabase = 0;
foreach ($redisCaches as $name => $values) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$name]['backend'] = \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$name]['options'] = [
'database' => $redisDatabase++,
'hostname' => $redisHost,
'port' => $redisPort
];
if (isset($values['defaultLifetime'])) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$name]['options']['defaultLifetime'] = $values['lifetime'];
}
if (isset($values['compression'])) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$name]['options']['compression'] = $values['compression'];
}
}