Caching Framework in Extensions

Extensions sollten um horizontal zu skalieren, Caches nicht in eigens gebauten $_SESSION Arrays oder Temporaeren SQL Tabellen halten, sondern das ab TYPO3 4.3.0 eingebaute und ab 4.3.1 vollstaendig umgesetzte Caching Framework (ein Backport aus der FLOW3 Entwicklung) verwenden.

Ein guter Artikel ist:

Bei der Entwicklung der Extensions ist natuerlich darauf zu achten, dass diese in der Form auch erst ab 4.3.1 korrekt arbeiten, und auf aelteren Installationen nicht funktionieren werden.

In kurzen Auszuegen:
In die ext_localconf.php folgendes hinzufuegen, wenn Memcached verwendet werden soll:

// If cache is not already defined, define it
if (!is_array($TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['my_extension'])) {
   $TYPO3_CONF_VARS['SYS']['caching'] ['cacheConfigurations']['my_extension'] = array(
      'backend' => 't3lib_cache_backend_MemcachedBackend', 'options' => array( 'servers' => array('localhost:11211'), ))
   );
}

In der Extension muss das cache Object erzeugt und initialisiert werden:

if (TYPO3_UseCachingFramework) {
   // Create the cache
   try {
      $GLOBALS['typo3CacheFactory']->create(
         'my_extension',
         't3lib_cache_frontend_VariableFrontend',
         $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['my_extension']['backend'],
         $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['my_extension']['options']
      );
   } catch(t3lib_cache_exception_DuplicateIdentifier $e) {
      // do nothing, the cache already exists
   }
   // Initialize the cache
   try {
      $this->cache = $GLOBALS['typo3CacheManager']->getCache(
         'my_extension'
      );
   } catch(t3lib_cache_exception_NoSuchCache $e) {
      // Unable to load
   }
}

Um jetzt mit dem Cache arbeiten zu koennen sind folgende Methoden vorhanden:

$this->cache->has($id);
$this->cache->get($id);
$this->cache->set($id, $content, $tags, $lifetime);

Um id, content, tags und lifetime muss man sich selber kuemmern…

Bei MemcacheBackend gilt zu beachten: Idealerweise keine $id laenger als 255 Byte und idealerweise keinen $content mit mehr als 1MByte … das TYPO3 Caching Framework bricht diese Grenzwerte zwar auf, allerdings ist die Performance dann so im Keller, dass man den Zwischenspeicher auch gleich auf Pergament schreiben kann.

Schreibe einen Kommentar