Redis als Cache-Backend in TYPO3

Das Caching-Framework bietet seit TYPO3 4.5 viele Möglichkeiten das Caching zu optimieren.

Eine, wie ich finde, sehr gute Möglichkeit, gerade wenn man mehrere TYPO3-Installationen auf einem Server versammelt sind, ist die Möglichkeit Teile des Cache in Redis abzulegen.

Durch die Möglichkeit in Redis viele verschiedene Datenbanken anzulegen werden die Caches sauber voneinander getrennt und man kann die Vorteile einer RAM-basierten Datenbank zu nutzen. Dies ist für mich ein entscheidender Vorteil gegenüber Memcache und lässt sich für die verschiedenen Cache-Backends nutzen.

Für TYPO3 < 6.2

$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_pages‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 0
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_pagesection‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 1
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_hash‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 2
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚extbase_object‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 3
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚extbase_reflection‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 4
        )
    );

Für TYPO3 >= 6.2 sieht das dann folgendermaßen aus:

$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 0
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 1
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 2
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 3
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 4
        );

oder zum direkten Einfügen in das caching-Array in der LocalConfiguration.php:

'cacheConfigurations' => array(
    'cache_pages' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 0
        )
    ),
    'cache_pagesection' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 1
        )
    ),        
    'cache_hash' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 2
        )
    ),        
    'extbase_object' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 3
        )
    ),        
    'extbase_reflection' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 4
        )                                                                                                                             
    )
)

In dieser Beispielkonfiguration wurde die Lebensdauer für alle Caches exemplarisch auf 24h gestellt, das kann man natürlich für die eigenen Bedürfnisse noch optimieren.

Das Redis Backend hat in meinem Fall die Auslierung der gecachten Seiten noch einmal um über 100ms beschleunigt. Klingt nach nicht sehr viel, bedeutet aber in meinem Fall einen Performanceschub um über 30%.

http://redis.io
http://docs.typo3.org/typo3cms/CoreApiReference/CachingFramework/Configuration/Index.html

Google+

4 Gedanken zu „Redis als Cache-Backend in TYPO3“

  1. Danke für diesen Beitrag! Stehe gerade selbst vor dem Problem, eine TYPO3-Website performance-technisch zu optimieren. Radis und Varnish sind 2 starke Kandidaten. Würde es Sinn machen, beide zu verwenden? Und wäre es eigentlich denkbar, statt Redis MongoDB zu verwenden?

    1. Das Redis-Cache-Backend ist ja für internes Caching in TYPO3 vorgesehen, für Mongo gibt es meines Wissens noch kein Cache-Backend, das müsste noch geschrieben werden. Der Vorteil von Redis gegenüber dem klassischen DB-Backend liegt in der deutlich höheren Antwortgeschwindigkeit von Redis.
      Varnish setzt ganz anders an, dort wird die gerenderte Antwort des Webservers gecached, was aber nur Sinn macht wenn du rein statische und überhaupt keine userspezifischen Inhalte auf der Seite hast, musst du mal schauen, ob es da für dich einen sinnvollen Einsatzzweck gibt.

  2. Für Typo3 6.2+ klappt der Aufruf nicht mehr, folgende syntax ist notwendig:

    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend';
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array(
    'database' => 3,
    );

    siehe auch: https://gist.github.com/cedricziel/5744800

Schreibe einen Kommentar

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