Server mit memcached, php-memcache und aktiviertem TYPO3 (>4.3.0) Caching Framework
memcached ist perfekt zum cachen eigener Inhalte. Damit der Server damit ausgeruestet ist:
apt-get install memcached
Ist ein Server mit mehr als 2 Kernen ausgestattet, sollte das threaded Paket installiert.
Der memcached sollte den freien RAM vollstaendig ausnutzen (nicht ueberbuchen, damit’s nicht ins SWAP geht).
Die Speichermenge kann in
/etc/memcached.conf
eingestellt werden.
PHP kann eine API anbieten (die Applikationen muessen sich aber schon selbstaendig um die Verwendung und Organisation des Caches kuemmern: z.B. TYPO3 Extensions koennen vom TYPO3 Core Caching Framework via memcache profitieren )
Um die PHP Erweiterung zu installieren:
apt-get install php5-dev
pecl install memcache-3.0.6
Ideale PHP Werte in
/etc/php5/conf.d/memcache.ini
sind
[memcache] memcache.dbpath="/var/lib/memcache" memcache.maxreclevel=0 memcache.maxfiles=0 memcache.archivememlim=0 memcache.maxfilesize=0 memcache.maxratio=0 memcache.protocol=ascii
… ergaenzend fuer TYPO3, ausgelagert in
/etc/php5/conf.d/t3memcache.ini
ist folgendes von Vorteil
memcache.allow_failover=1 memcache.chunk_size=32768 memcache.default_port=11211 memcache.hash_function=fnv memcache.hash_strategy=consistent memcache.max_failover_attempts=20
Das „binary“ Protokoll wird von PHP nicht vollstaendig unterstuetzt, daher muss „ascii“ als sehr parser-intensives und langsameres Protokoll verwendet werden.
Damit TYPO3 vom memcache profitiert, folgende Einstellungen in der localconf.php vornehmen:
// ----- Caching with MemCache 4.3 only ----
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations'] = array (
'cache_hash' => array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211'),
)
),
'cache_pages' => array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211'),
)
),
'cache_pagesection' => array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211'),
)
),
);
$TYPO3_CONF_VARS['SYS']['useCachingFramework'] = '1';
// ----- /Caching with MemCache 4.3 only----
hier eine aktualisierte Version, die nicht das komplette cacheConfigurations Array ueberschreibt (danke fuer den Hinweis, Steffen).
// ----- Caching with MemCache - doesn't overwrite cacheConfigurations array completely -----
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash'] = array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211')
)
);
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages'] = array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211')
)
);
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection'] = array(
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'backend' => 't3lib_cache_backend_MemcachedBackend',
'options' => array(
'servers' => array('tcp://localhost:11211')
)
);
$TYPO3_CONF_VARS['SYS']['useCachingFramework'] = '1';
// ----- /Caching with MemCache - doesn't overwrite cacheConfigurations array completely -----
Steht ein weiterer, dezidierter memcache Server bereit, sollte der in die ’servers‘ Arrays mit aufgenommen werden. Um split-brain in den Caches zu vermeiden und die Last besser zu koordinieren, ist es aber besser fuer jedes Segment einen eigenen, einzelnen Server zu verwenden (wenn man 3 Server uebrig hat…)
Dom,
php-memcache ist nicht php-memcached. Das sind unterschiedliche PECL extensions. Wie eine funktionierende php-memcache extension installiert werden kann, steht im Text 😉 Ich habe dort gerade die Version von 3.0.1 auf die aktuelle 3.0.6 geandert.
Um Steffens Einwand, das cacheConfigurations Array nicht komplett zu ueberschreiben, gerecht zu werden, habe ich den Beitrag noch um ein Konfigurationsbeispiel dazu ergaenzt.
Hmm komischer weise bekomm ich mit mit den Settings die Exception das “Memcache” nicht installiert sei. Ich dachte es sei “MemcacheD” im spiel ?
oder muss ich da noch was umstellen weil “memcacheD” bei mir definitiv installiert ist.
zur info im core steht : class.t3lib_cache_backend_memcachedbackend
public function __construct(array $options = array()) {
if (!extension_loaded(‘memcache’)) {
throw new t3lib_cache_Exception(
‘The PHP extension “memcache” must be installed and loaded in ‘ .
‘order to use the Memcached backend.’,
1213987706
);
}
Hi,
schöner Beitrag!
Ist die Konfiguration inzwischen auf dem neuen Stand?
Sorry, ich muss leider sagen, dass das so eine schlechte Idee ist.
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘] sollte keinesfalls komplett überschrieben werden, denn das wird mit TYPO3 4.6 definitiv (nach momentanem Stand) krachen, weil der neue cache_runtime dann plötzlich nicht existiert.
Folglich einfach
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_XXX‘]
umschreiben, dann ist’s auch zukunftssicher!
Siehe
http://forge.typo3.org/issues/27208
http://wiki.typo3.org/Caching_framework
Gruß
Steffen
Hallo Steffen,
danke fuer den Hinweis, natuerlich ist Dein Einwand absolut gerechtfertigt.
Ich werde den Artikel die naechsten Tage entsprechend korrigieren.