TYPO3 Caching Framework in eigener Extension verwenden

Um unsere TYPO3 Galerie YAG auch für hochfrequentiere Seiten einsetzbar zu machen, habe ich mir heute einige Gedanken zu Caching gemacht. Ich war schon drauf und dran eine eigene Lösung zu schreiben, da bin ich auf den Artikel Caching in extensions gestossen, welcher den Einbau des Caching-Frameworks von TYPO3 > 4.3 beschreibt.

Folgende Schritte zur Verwendung des Frameworks nötig (Beispiele aus pt_extlist):

  • Anlegen der Cache-Tabellen in der ext_tables.sql
  • Definieren des Caches in der ext_localconf.php
  • Registrieren des Caches für den "Cache löschen" button in der ext_tables.php
  • Instanziieren des Caches in der eigenen Extension
  • Verwenden des Caches

Anlegen der Cache-Tabellen in der ext_tables.sql

CREATE TABLE tx_ptextlist_cache_state (
   id int(11) NOT NULL auto_increment,
   identifier varchar(128) NOT NULL DEFAULT '',
   crdate int(11) unsigned NOT NULL DEFAULT '0',
   content mediumtext,
   lifetime int(11) unsigned NOT NULL DEFAULT '0',
   PRIMARY KEY (id),
   KEY cache_id (`identifier`)
);

CREATE TABLE tx_ptextlist_cache_state_tags (
   id int(11) NOT NULL auto_increment,
   identifier varchar(128) NOT NULL DEFAULT '',
   tag varchar(128) NOT NULL DEFAULT '',
   PRIMARY KEY (id),
   KEY cache_id (`identifier`),
   KEY cache_tag (`tag`)
);

Registrieren des Caches für den "Cache löschen" button in der ext_tables.php

if (TYPO3_MODE == 'BE') {

    // register the cache in BE so it will be cleared with "clear all caches"
    try {
        t3lib_cache::initializeCachingFramework();
            // State cache
        $GLOBALS['typo3CacheFactory']->create(
            'tx_ptextlist_cache_state',
            $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_ptextlist']['frontend'],
            $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_ptextlist']['backend'],
            $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_ptextlist']['options']
        );
        
    } catch(t3lib_cache_exception_NoSuchCache $exception) {

    }
}

Instanziieren des Caches in der eigenen Extension

// Create the cache
            try {
                $GLOBALS['typo3CacheFactory']->create(
                    'tx_ptextlist',
                    't3lib_cache_frontend_VariableFrontend',
                    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_ptextlist']['backend'],
                    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['tx_ptextlist']['options']
                );
            } catch(t3lib_cache_exception_DuplicateIdentifier $e) {
                // do nothing, the cache already exists
            }
            
            // Initialize the cache
            try {
                $cache = $GLOBALS['typo3CacheManager']->getCache('tx_ptextlist');
            } catch(t3lib_cache_exception_NoSuchCache $e) {
                throw new Exception('Unable to load Cache! 1299942198');
            }

Verwenden des Caches

Um mit dem Cache zu arbeiten stehen nun folgende Methoden zu Verfügung: $cache->has($id); $cache->get($id); $cache->remove($id); $cache->flush(); $cache->set($id, $content, $tags, $lifetime); $lifetime ist per default 3600s und kann auf 0 = unendlich gesetzt werden.
$tags können zur Identifizierung eines oder mehrerer Cache Einträgen verwendet werden, und dienen damit zur Strukturierung des Caches: $identifiers = $cache->findIdentifiersByTag($tag); $identifiers = $cache->findIdentifiersByTags(array $tags); geben die zu einem Tag zugehörigen cache-identifiers zurück und  $cache->flushByTag($tag); $cache->flushByTags(array $tags); löscht die Einträge bestimmter Tags aus dem cache. Zu guter letzt werden mit: $cache->collectGarbage(); alle abgelaufenen Einträge gelöscht.


Inhalt © Daniel Lienert 2009-2014  •  Powered by TYPO3  •  Impressum