2010-09-20 14 views
6

Tengo una colección que toma mucho tiempo cargar. Lo que me gustaría es almacenarlo en la memoria caché (APC, Memcache). No es posible almacenar en caché todo el objeto (ya que no se puede deserializar y tiene más de 1 MB). Estoy pensando que el almacenamiento en caché de los datos de la colección ($ col-> getData()) es el camino a seguir, pero no encontré la forma de reconstruir el objeto basado en esta matriz. ¿Alguna pista?Cómo almacenar en caché una colección en Magento?

Respuesta

1

Realmente no sé, pero busqué todos los archivos que tienen la palabra "caché" en ellos con los nombres de archivo de "Collection.php" y obtuve algunos resultados. El ejemplo más prometedor para mirar podría ser el método Mage_Sales_Model_Entity_Quote_Item_Collection (_getProductCollection()). Parece que Varien_Data_Collection (que es una clase padre de cualquier colección de magento) tiene algunos métodos relacionados con la memoria caché: initCache() and _getCacheInstance().

No puedo decir que los haya usado antes, pero podría ser útil algún día.

Buena suerte.

4

Colecciones ya tienen alguna almacenamiento en caché construida en pero necesitan un poco de ayuda a fin de poner esto en el constructor de una colección:

$cache = Mage::app()->getCacheInstance(); 
$prefix = "SomeUniqueValue"; 
$this->initCache($cache, $prefix, array(Mage_Catalog_Model_Product::CACHE_TAG)); 

escoge las etiquetas apropiadas para el contenido de la colección de modo que se vacía automáticamente . De esta forma se crea una ID basada en la consulta que se está ejecutando, es más útil cuando la colección se filtra, ordena o busca: evita un conflicto de versión.

Generalmente esto apenas se usa porque cuando recuperas datos casi siempre terminas mostrándolos, probablemente como HTML, por lo que tiene sentido guardar en caché el resultado. El almacenamiento en caché de bloque es ampliamente utilizado y mejor documentado.

+0

¿Cómo puedo guardar en caché una colección en su lugar desde el objeto Block? – davidselo

+0

No entiendo la pregunta. – clockworkgeek

+0

Si puedo hacer un bloque con Mage :: getModel ('example/example') -> getCollection() -> initCache (...). Crear nueva colección desde la instancia de Bloque – davidselo

Cuestiones relacionadas