Kein Cache mit Cachify und Memcached

Mit dem WordPress-Plugin Cachify steht eine Lösung zur Verfügung, die ein einfaches Zwischenspeichern von dynamisch erzeugten Webseiten bietet. Die Inhalte können mit unterschiedlichen Methoden zwischengespeichert werden. Unterstützt werden APC, Disk, DB und Memcached (nur mit Nginx). Da ich hier Nginx einsetze, bietet sich Memcached als schnellste Variante an. Wie Cachify und Nginx dann zu konfigurieren sind kann im Cachify-Wiki nachgelesen werden.

Die erfolgreiche Konfiguration läßt sich einfach überprüfen: es wird an das Ende der jeweiligen Webseite ein HTML-Kommentar von Cachify eingefügt. Ist dieser im Quelltext der Seite vohanden, dann wurde die Seite aus dem Cache, bei mir also von Nginx/Memcached ausgeliefert.

1<!-- Cachify | http://cachify.de
2Memcached @ 08.07.2016 13:25:07 -->

Nach ein paar Tests stellte sich heraus, dass genau eine Seite hier aus dem Blog nicht zwischengespeichert wird. Nach langem Suchen fand ich dann den Grund: der Seitenquelltext ist größer als 1 MB (bedingt durch sehr viele Kommentare auf der Seite) und Memcached speichert in der Standardkonfiguration nur Items bis zu einer Größe von 1 MB.

Ab der Version 1.4.2 von Memcached kann diese Größe konfiguriert werden. Unter Debian 8 fügt man dazu in die Datei /etc/memcached.conf eine neue Zeile mit z.B.

-I 2m

ein. Damit wird die Maximalgröße eines Items auf 2 MB angehoben. Anschließend muss Memcached neu gestartet werden. Mit folgendem Kommando lassen sich die aktuellen Einstellungen eines laufenden Memcached anzeigen:

 1# echo "stats settings" | netcat localhost 11211
 2STAT maxbytes 134217728
 3STAT maxconns 1024
 4STAT tcpport 11211
 5STAT udpport 11211
 6STAT inter 127.0.0.1
 7STAT verbosity 0
 8STAT oldest 0
 9STAT evictions on
10STAT domain_socket NULL
11STAT umask 700
12STAT growth_factor 1.25
13STAT chunk_size 48
14STAT num_threads 4
15STAT num_threads_per_udp 4
16STAT stat_key_prefix :
17STAT detail_enabled no
18STAT reqs_per_event 20
19STAT cas_enabled yes
20STAT tcp_backlog 1024
21STAT binding_protocol auto-negotiate
22STAT auth_enabled_sasl no
23STAT item_size_max 2097152
24STAT maxconns_fast no
25STAT hashpower_init 0
26STAT slab_reassign no
27STAT slab_automove 0
28STAT lru_crawler no
29STAT lru_crawler_sleep 100
30STAT lru_crawler_tocrawl 0
31STAT tail_repair_time 0
32STAT flush_enabled yes
33STAT hash_algorithm jenkins
34END
35^C

Unter item_size_max ist die neue Einstellung zu erkennen. Alternativ kann auch phpMemcachedAdmin verwendet werden, um den Inhalt der Caches anzuzeigen.