MM: Singleton: Objekt seitenübergreifend ablegen

Hallo Forum,

meine mehrsprachige Seite ließt die lokalisierten Texte aus einer Datenbank. Nun muss ich das ganze noch performance-optimieren. Da sich die Texte i.d.R. nicht ändern (und wenn doch, bekomme ich das mit), möchte ich gerne einen Cache implementieren.
Mein Ansatz (muss PHP 4 verwenden):

class TranslationCache {

var $cache = array();

function &getInstance() {
  static $instance;
  if (!isset($instance)) {
   $instance = new TranslationCache();
  }
  return $instance;
 }

function add($inDomain, $inForeignId, $inField, $inLanguage, $inText) {
  $this->cache[$inDomain][$inForeignId][$inField][$inLanguage] = $inText;
 }

function get($inDomain, $inForeignId, $inField, $inLanguage) {
  return $this->cache[$inDomain][$inForeignId][$inField][$inLanguage];
 }

function reset($inDomain, $inForeignId, $inField, $inLanguage) {
  unset($this->cache[$inDomain][$inForeignId][$inField][$inLanguage]);
 }
}

Wenn ich das so teste, klappt es auch:
$cache =& TranslationCache::getInstance();
echo($cache->add("Menu", 7, "bla", "de", "deutsch"));
echo($cache->add("Menu", 7, "bla", "en", "englisch"));
echo($cache->get("Menu", 7, "bla", "de));

Allerdings soll der Cache ja auch noch da sein, wenn ich auf eine andere Seite gehen. Auf einer völlig anderen Seite muss ich also auch
echo($cache->get("Menu", 7, "bla", "de));
aufrufen können und einen Wert bekommen.

Jetzt die Frage:
Wie schaffe ich es, dass das Cache-Singleton seitenübergreifend existiert?

In die Session legen, wäre nur die halbe Miete, denn es sollen ja alle Besucher den selben Cache nutzen.

Wer hat einen Tipp?

Danke und Gruß
MM

  1. hi,

    Wie schaffe ich es, dass das Cache-Singleton seitenübergreifend existiert?

    Trenne erst mal die Begrifflichkeiten - das eine hat mit dem anderen im Grunde nichts zu tun.

    Du hast ein Objekt, und möchtest darauf Scriptinstanz-übergreifend zugreifen können.
    Ob dieses Objekt "Singleton ist", oder nicht, ist vollkommen wurst.

    In die Session legen, wäre nur die halbe Miete, denn es sollen ja alle Besucher den selben Cache nutzen.

    Man könnte ja die SID im Script selber vorgeben - und immer die gleiche nehmen. Aber auch irgendwie suboptimal.

    Eher was für dich könnten Shared Memory Funktionen, Alternative PHP Cache oder Memcache Functions sein.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. http://www.danga.com/memcached/ <-- vllt. wär das eine überlegung wert?

  3. echo $begrüßung;

    Nun muss ich das ganze noch performance-optimieren.

    Hast du gemessen, wie lange dieses Auslesen dauert? Nicht dass ein Dateizugriff, den du möglicherweise für deine Cache-Lösung verwenden wirst, mehr Zeit in Anspruch nimmt als die Datenbankabfrage.

    [...] möchte ich gerne einen Cache implementieren.

    Du hast dir die bereits vorhandenen Cache-Implementierungen schon angesehen?

    Wie schaffe ich es, dass das Cache-Singleton seitenübergreifend existiert?
    In die Session legen, wäre nur die halbe Miete, denn es sollen ja alle Besucher den selben Cache nutzen.

    Eine Session ist anhand ihrer eindeutigen ID identifizierbar. Man kann diese ID auch selbst festlegen. Wenn alle die selbe ID verwenden, ...

    echo "$verabschiedung $name";