Domanda

I riscrivere blocco catalogo lista dei prodotti per la memorizzazione nella cache problema. Si prega di codice di revisione e dare i vostri consigli per migliorare il caching e le questioni di cache-validazione di enorme prodotto sfogliare pagine di categoria. Chi ha una migliore configurazione per la memorizzazione nella cache blocchi come questo?

class Ssd_Fix_Block_Catalog_Product_List extends Mage_Catalog_Block_Product_List
{
    const CACHE_TAG = 'CATEGORY_PRODUCTS';

    public function getCacheKey()
    {
        $url = md5(Mage::app()->getRequest()->getOriginalRequest()->getRequestUri());
        if (!$this->_cache_key) {
            $key              = "CATEGORY_PRODUCTS_" . $url;
            $this->_cache_key = $key;
        }
        return $this->_cache_key;
    }

    public function getCacheTags()
    {
        $data = array(self::CACHE_TAG);
        if ($category = Mage::registry('current_category')) {
            $data[] = Mage_Catalog_Model_Category::CACHE_TAG . "_" . $category->getId();
        }
        if (count($products = $this->getProductList())) {
            foreach ($products as $p) {
                $data[] = Mage_Catalog_Model_Product::CACHE_TAG . "_" . $p->getId();
            }
        }
        return $data;
    }

    public function getCacheLifetime()
    {
        return 60 * 60 * 24;
    }

    //other methods here
}
È stato utile?

Soluzione

Sarebbe meglio per l'override del metodo getCacheKeyInfo() invece di getCacheKey().

public function getCacheKeyInfo()
{
    $info = parent::getCacheKeyInfo();
    // Add any additional data you want
    $info[] = Mage::app()->getRequest()->getOriginalRequest()->getRequestUri();
    return $info;
}

L'hashing del valore è preso cura di automaticamente.
Questo richiederà cura dati importanti come la vista attuale del serbatoio, il tema e il modello utilizzato sono inclusi.

In generale l'URI della richiesta non è considerata ideale per scopi chiave di cache, dal momento che ci sono molti fattori che possono influenzare l'uscita blocchi che non sono contenuti nella URI.

Per esempio, se l'uscita del blocco contiene i prezzi, assicurarsi di includere l'ID gruppo di clienti (legato alla tax_class_id del cliente) in informazioni matrice chiave di cache.

Ci può anche essere diverse permutazioni della richiesta URI che si riferiscono tutti alla stessa pagina, ad esempio con un trascinamento / e senza. E 'in genere porta a risultati migliori per costruire la matrice chiave di cache manualmente.

Per i tag di cache, essere sicuri di includere i tag di cache di tutti i prodotti esposti, troppo (già fatto in 1.8 / 1.13).

Consiglio anche utilizzando una cache pagina intera in aggiunta al blocco di messa a punto nella cache.

Altri suggerimenti

enorme di prodotti pagine di categoria sfogliare

Forse un algoritmo deterministico come Monte Carlo è un buon punto di partenza. Per esempio è possibile memorizzare nella cache con una probabilità del (10% * isThisHardToDoFactor). Dopo aver mostrato il prodotto 10 volte con un normale isThisHardToDoFactor, si ha un'alta probabilità che cercherà di cache. Se è mostrato solo una volta o due volte (durante la prova), ha una bassa probabilità di riempire la cache. Anche fare il TTL un po 'casuale, non si vuole un sacco di voci di cache scade esattamente nello stesso momento.

https://en.wikipedia.org/wiki/Monte_Carlo_algorithm

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top