Redis Cache zur Steigerung der Magento Performance einrichten

redis_logoDie Zeiten, in denen Magento Shops als träge galten, sind – zum Glück – lange vorbei. Neben den Optimierungen, die das Magento Core Team in den Kern eingebracht hat, tragen vor allem diverse Caching-Systeme zur deutlichen – objektiv und subjektiv – meßbaren Beschleunigung bei.

Redis – ein Opensource Caching System – kann unserer Erfahrung nach sowohl das Magento Frontend als auch das Backend ganz erheblich beschleunigen. Dank der direkten Unterstützung seit Magento 1.8 lässt es sich einfach in jedem Magento Shop integrieren. Wir erklären wie.

Das ist Redis

Redis ist ein Key-Value Speichersystem, welches im Arbeitsspeicher angesiedelt ist, vergleichbar dem verbreiteten Memcache. Redis kann Memcache vollständig ersetzen. Es zeichnet sich unter anderem dadurch gegenüber Memcache aus, dass es ein Speichern auf Festspeicher sowie Replikation erlaubt, so dass es hochverfügbar betrieben werden kann.
Redis kann als alternativer Backend-Cache sowie für das Speichern von Session-Informationen in Magento eingesetzt werden.

Installation von Redis

Redis läuft als Dienst. Für die gängigen Linux-Distributionen sind Paketquellen für die Installation verfügbar.
Ubuntu:
In den Ubuntu-Paketquellen ist Redis derzeit nur in Version 13.10 enthalten. Bei anderen Versionen muss das ppa https://launchpad.net/~rwky/+archive/redis hinzufügt werden:
sudo add-apt-repository ppa:rwky/redis
sudo apt-get update
sudo apt-get install redis-server

Debian und andere Linux-Derivate:
Von http://redis.io/download die neueste Version herunterladen, installieren und starten:


wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
mv src/redis-server /usr/local/sbin/
/usr/local/sbin/redis-server

Einrichtung von Redis in Magento

Das Magento Redis Modul ist ab Version 1.8 vorinstalliert, aber deaktiviert.
Für die Aktivierung in der Datei magento-install-dir/app/etc/modules/Cm_RedisSession.xml einfach die
Option <active> von false auf true ändern, um das Modul zu aktivieren.

Nach dem das Redis-Modul aktiviert und installiert ist, muss noch die local.xml angepasst werden:
magento-install-dir/app/etc/local.xml erweitern mit nachfolgendem Eintrag.

	<global>
        <cache>
            <backend>Cm_Cache_Backend_Redis</backend>
            <backend_options>
                <server>127.0.0.1</server> <!-- or absolute path to unix socket for better performance -->
                <port>6379</port>
                <database>DOMAIN_0</database>
                <password></password>r
                <force_standalone>1</force_standalone>  <!-- 0 for phpredis, 1 for standalone PHP -->
                <connect_retries>1</connect_retries>    <!-- Reduces errors due to random connection failures -->
                <automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default -->
                <compress_data>1</compress_data>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
                <compress_tags>1</compress_tags>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
                <compress_threshold>20480</compress_threshold>  <!-- Strings below this size will not be compressed -->
                <compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf and snappy -->
                <persistent>1</persistent> <!-- persistence value, 0: not in use, > 0 used as persistence ID -->
            </backend_options>
        </cache>
        <!-- example of redis full page cache -->
        <full_page_cache>
            <backend>Cm_Cache_Backend_Redis</backend>
            <backend_options>
                <server>127.0.0.1</server> <!-- or absolute path to unix socket for better performance -->
                <port>6379</port>
                <database>DOAMIN_1</database>
                <password></password>
                <force_standalone>1</force_standalone>  <!-- 0 for phpredis, 1 for standalone PHP -->
                <connect_retries>1</connect_retries>    <!-- Reduces errors due to random connection failures -->
                <automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default -->
                <!-- in FPC data is already gzipped, no need to do this twice -->
                <compress_data>0</compress_data>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
                <compress_tags>1</compress_tags>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
                <compress_threshold>20480</compress_threshold>  <!-- Strings below this size will not be compressed -->
                <compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf and snappy -->
                <lifetimelimit>43200</lifetimelimit> <!-- set lifetime for keys without TTL -->
                <persistent>2</persistent>
            </backend_options>
        </full_page_cache>
        <!-- example of redis session storage -->
        <session_save>db</session_save>
        <redis_session>                       <!-- All options seen here are the defaults -->
            <host>127.0.0.1</host>            <!-- Specify an absolute path if using a unix socket -->
            <port>6379</port>
            <password></password>             <!-- Specify if your Redis server requires authentication -->
            <timeout>2.5</timeout>            <!-- This is the Redis connection timeout, not the locking timeout -->
            <persistent></persistent>         <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: https://github.com/nicolasff/phpredis/issues/70 -->
            <db>DOMAIN_0</db>                        <!-- Redis database number; protection from accidental loss is improved by using a unique DB number for sessions -->
            <compression_threshold>2048</compression_threshold>  <!-- Set to 0 to disable compression (recommended when suhosin.session.encrypt=on); known bug with strings over 64k: https://github.com/colinmollenhour/Cm_Cache_Backend_Redis/issues/18 -->
            <compression_lib>gzip</compression_lib>              <!-- gzip, lzf or snappy -->
            <log_level>1</log_level>               <!-- 0 (emergency: system is unusable), 4 (warning; additional information, recommended), 5 (notice: normal but significant condition), 6 (info: informational messages), 7 (debug: the most information for development/testing) -->
            <max_concurrency>6</max_concurrency>                 <!-- maximum number of processes that can wait for a lock on one session; for large production clusters, set this to at least 10% of the number of PHP processes -->
            <break_after_frontend>5</break_after_frontend>       <!-- seconds to wait for a session lock in the frontend; not as critical as admin -->
            <break_after_adminhtml>30</break_after_adminhtml>
            <bot_lifetime>7200</bot_lifetime>                    <!-- Bots get shorter session lifetimes. 0 to disable -->
        </redis_session>
    </global>

Hier mindestens

  • <database> Eintrag anpassen
  • <forece_standalone> auf 1 setzen, wenn man kein phpredis einsetzt.
Abschließend den Magento-Cache leeren.

Magento vor 1.8

Redis kann auch mit älteren Versionen von Magento betrieben werden, z.B. mit 1.7.x
Das benötigte Redis-Modul Magento-Modul Cm_RedisSession muss in diesen Fällen manuell installiert werden. Es ist bei github unter dieser Adresse verfügbar: https://github.com/colinmollenhour/Cm_RedisSession
Die Magento Expert Consulting Group hat ein lesenswertes Papier zu Redis mit Magento veröffentlicht: http://www.magentocommerce.com/consulting/expert-articles/using-redis-as-a-cache-backend-in-magento
Die Redis Server Dokumentation findet man hier: http://redis.io/documentation

BTW

Es gibt auch einen Redis Desktop Manager – Screenshot anbei.
redis-desktop-manager

2 Gedanken zu „Redis Cache zur Steigerung der Magento Performance einrichten

  1. Gaven

    Hallo ich habe eien Frage nach der Installation versuche ich den den Magento Shop zu erreichen aber ich komme auf die Magento Installationsseite ist hier etwas schief gelaufen?

    Antworten
    1. Andrej RadonicAndrej Radonic Beitragsautor

      Hallo Gaven,

      meinst du mit Installation die Einrichtung eines neuen Magento-Shops oder von Redis?

      Grundsätzlich würde ich mal folgendes prüfen: wurde app/etc/local.xml angelegt. Hat der Webserver Schreibrechte?

      Viele Grüße
      Andrej

      Antworten

Schreibe einen Kommentar

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