2 Stimmen

Domänenübergreifende Zwischenspeicherung mit Memcache und Doctrine 1.2

Also, ich habe ein Problem, fünf Domains auf einem Motor, Motor verwenden Doctrine 1.2 ORM, alle Abfragen Zwischenspeichern mit memcache (Doctrine_Cache_Memcache). Wie machen Sie Präfix zu Schlüssel für jede Domäne und bekommen von Cache von domainprefix_key? Danke.

3voto

quickshiftin Punkte 60147

Sie können ein Derivat erstellen, das entweder erweitert oder zusammengesetzt ist Doctrine_Cache_Memcache . In der Ableitung ändern Sie einfach die id durch Voranstellen des Domänenteils des Schlüssels vor der Übergabe der Ausführung an Doctrine_Cache_Memcache .

Hier ist ein Beispiel für die Verwendung von Vererbung, wobei die _doSave Methode; die anderen öffentlichen Mitglieder können in ähnlicher Weise außer Kraft gesetzt werden.

<?php
class DomainCache extends Doctrine_Cache_Memcache
{
    private function _getDomain()
    {
        // this could pull from config, a database, it
        // could even be hardcoded on a per-project basis - YMMV!
    }

    /**
     * Given the normal id the application would use, prefix
     * it with the appropriate domain.
     */
    private function _getDomainId($id)
    {
        return $this->_getDomain() . '_' . $id;
    }

    /**
     * Save a cache record directly. This method is implemented by the cache
     * drivers and used in Doctrine_Cache_Driver::save().
     * Overridden such that a domain-specific key is used.
     *
     * @param string $id        cache id
     * @param string $data      data to cache
     * @param int $lifeTime     if != false, set a specific lifetime for this
     *                          cache record (null => infinite lifeTime)
     * @return boolean true if no problem
     */
    protected function _doSave($id, $data, $lifeTime = false)
    {
        return parent::_doSave($this->_getDomainId($id), $data, $lifeTime);
    }
}

Wenn Sie am Komponieren interessiert sind Doctrine_Cache_Memcache Nehmen wir zum Beispiel an, Sie möchten das, was die eigentliche Arbeit ausmacht, erweitern _getDomain würden Sie Folgendes implementieren Doctrine_Class_Interface stattdessen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X