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.
Antwort
Zu viele Anzeigen?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.