|
|
QUIQQER Redis Caching
|
|
|
======
|
|
|
|
|
|
Um QUIQQER noch schneller zu machen, empfehlen wir zusätzlich einen Redis Server als Caching Server zu nutzen. Jedoch gibt es einige Sachen die beachtet werden sollten.
|
|
|
|
|
|
Damit die Kommunikation zwischen Redis Server und QUIQQER einwandfrei funktioniert empfehlen wir erst einmal zu prüfen wie groß dein QUIQQER System wirklich ist. QUIQQER cached viele Anfragen, damit der Zugriff schnell von statten geht.
|
|
|
|
|
|
Je nach Größe und Umfang deiner QUIQQER Installation kann dies von 5 MB bis ganze Gigabyte gehen. Für normale Webseiten reicht im Normalfall ein Redis Cache von 100MB. Wird jedoch ein E-Commerce Shop betrieben sollte dies vorher geprüft werden.
|
|
|
|
|
|
## Für E-Commerce / ERP System
|
|
|
|
|
|
Bitte erstelle vorher den kompletten Produkt-Cache um zu prüfen wie groß dein Cache werden kann.
|
|
|
|
|
|
### 1. Stelle dein System auf Filesystem Caching um
|
|
|
|
|
|
- Öffne das Backend (Administration)
|
|
|
- Gehe zu `Einstellungen -> QUIQQER -> Cache`
|
|
|
- Caching-Typ auf Dateisystem umstellen
|
|
|
|
|
|
### 2. Generiere den Produktcache
|
|
|
|
|
|
Um einen kompletten Produktcache zu erstellen kannst du folgendes Konsolen Tool verwenden:
|
|
|
|
|
|
- `products:generate-product-cache`
|
|
|
|
|
|
Führe dazu folgenden Befehl im Verzeichnis deiner QUIQQER Installation in der Konsole aus:
|
|
|
|
|
|
- `php quiqqer.php --tool="products:generate-product-cache"`
|
|
|
|
|
|
Je nach dem wie viel Produkte du in deinem Shop besitzt kann dies etwas dauern.
|
|
|
|
|
|
|
|
|
### 3. Bestimmen der Cachegrösse
|
|
|
|
|
|
Wenn der Cache erfolgreich erzeugt wurde führe bitte folgenden Befehl aus:
|
|
|
|
|
|
- `du -hs var/cache`
|
|
|
|
|
|
Der `du` Befehl bestimmt die Grösse des Cache Ordners von QUIQQER.
|
|
|
|
|
|
|
|
|
### 4. Redis Grösse
|
|
|
|
|
|
Nach dem du weist wie groß dein QUIQQER Cache ist, kannst du deinen Redis Server dementsprechend anpassen. Am besten vergibst du dem Redis Server etwas mehr, wir empfehlen 10% mehr als der Cache Ordner.
|
|
|
|
|
|
Hier zu suche in der `redis.conf` Datei nach der `maxmemory` Einstellung. Die `redis.conf` findest du unter `/etc/redis/redis.conf`.
|
|
|
|
|
|
```
|
|
|
|
|
|
############################## MEMORY MANAGEMENT ################################
|
|
|
|
|
|
# Set a memory usage limit to the specified amount of bytes.
|
|
|
# When the memory limit is reached Redis will try to remove keys
|
|
|
# according to the eviction policy selected (see maxmemory-policy).
|
|
|
#
|
|
|
# If Redis can't remove keys according to the policy, or if the policy is
|
|
|
# set to 'noeviction', Redis will start to reply with errors to commands
|
|
|
# that would use more memory, like SET, LPUSH, and so on, and will continue
|
|
|
# to reply to read-only commands like GET.
|
|
|
#
|
|
|
# This option is usually useful when using Redis as an LRU or LFU cache, or to
|
|
|
# set a hard memory limit for an instance (using the 'noeviction' policy).
|
|
|
#
|
|
|
# WARNING: If you have slaves attached to an instance with maxmemory on,
|
|
|
# the size of the output buffers needed to feed the slaves are subtracted
|
|
|
# from the used memory count, so that network problems / resyncs will
|
|
|
# not trigger a loop where keys are evicted, and in turn the output
|
|
|
# buffer of slaves is full with DELs of keys evicted triggering the deletion
|
|
|
# of more keys, and so forth until the database is completely emptied.
|
|
|
#
|
|
|
# In short... if you have slaves attached it is suggested that you set a lower
|
|
|
# limit for maxmemory so that there is some free RAM on the system for slave
|
|
|
# output buffers (but this is not needed if the policy is 'noeviction').
|
|
|
#
|
|
|
maxmemory 1000mb
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
Zusätzlich empfehlen wir die `maxmemory-policy` des Redis Servers anzupassen. Standardmäßig steht die policy auf `noeviction`. Diese Einstellung besagt, falls der Redis Cache kein Speicher mehr zur Verfügung hat, das auch kein weiterer Cache mehr angelegt wird.
|
|
|
|
|
|
Diese Einstellung besagt jedoch auch, das Fehler geworfen werden soll wenn dies zutrifft. Um diesen Fall nicht eintreffen zu lassen solltest du `maxmemory-policy` auf `allkeys-lru` setzen
|
|
|
|
|
|
Folgende Möglichkeiten für `maxmemory-policy` gibt es:
|
|
|
|
|
|
- volatile-lru -> Entfernen eines Schlüssel mit einem Ablaufdatum unter Verwendung eines LRU-Algorithmus.
|
|
|
- allkeys-lru -> Entfernen eines Schlüssels entsprechend dem LRU-Algorithmus.
|
|
|
- volatile-random -> Entfernen eines zufälligen Schlüssels mit einer Ablaufsteuerung
|
|
|
- allkeys->random -> Entfernen eines zufälligen Schlüssels, eines beliebigen Schlüssels
|
|
|
- volatile-ttl -> Entfernen eines Schlüssel mit der nächstgelegenen Verfallszeit (kleine TTL).
|
|
|
- noeviction -> läuft überhaupt nicht ab, sondern gibt einfach einen Fehler bei Schreibvorgängen zurück.
|
|
|
|