2011-12-07 11 views
17

कैश प्रबंधन के तहत Magento व्यवस्थापक में, इसका अर्थ यह है कि यह कैश को अमान्य के रूप में दिखाता है? Magento कैसे एक कैश पता है अवैध है? विशेष रूप से, मैं HTML ब्लॉक कैश के बारे में सोच रहा हूं। इस कैश को अमान्य के रूप में दिखाने के लिए कौन सी स्थितियां पैदा होंगी?Magento में "अवैध" कैश का क्या अर्थ है?

उत्तर

16

Magento में, जब भी आप उत्पादों, स्थिर ब्लॉक इत्यादि में परिवर्तन करते हैं, यह पहचानता है कि डेटाबेस में डेटा कैश में जो कुछ भी है, उतना ही नहीं है। दुर्भाग्य से, Magento का एहसास नहीं है कैश डेटा अलग है, बस कुछ अलग है।

आपको सिस्टम> कैश प्रबंधन में जाना होगा और अमान्य कैश प्रकार रीफ्रेश करना होगा।

संपादित करें:

एक मॉड्यूल बनाएँ (या एक मौजूदा मॉड्यूल का उपयोग) है कि आप कैश ताज़ा के लिए एक क्रॉन जॉब स्थापित करने के लिए उपयोग कर सकते हैं। {Namespace}/{modulename} /Model/Observer.php

उस फ़ाइल के अंदर:: एक फ़ाइल बनाएँ

<?php 
class <namespace>_<modulename>_Model_Observer { 

    public function refreshCache() { 
    try { 
     $allTypes = Mage::app()->useCache(); 
     foreach($allTypes as $type => $blah) { 
     Mage::app()->getCacheInstance()->cleanType($type); 
     } 
    } catch (Exception $e) { 
     // do something 
     error_log($e->getMessage()); 
    } 
    } 

} 

में अपने मॉड्यूल के etc/config.xml:

<config> 
    ... 
    <crontab> 
    <jobs> 
     <{modulename}_refresh_cache> 
     <schedule><cron_expr>* * * * *</cron_expr></schedule> 
     <run><model>{modulename}/observer::refreshCache</model></run> 
     </{modulename}_refresh_cache> 
    </jobs> 
    </crontab> 
    ... 
</config> 

अब के रूप में जब तक आपके सर्वर पर क्रॉन सही तरीके से कॉन्फ़िगर किया गया हो, तब तक कैश स्वचालित रूप से अपडेट हो जाएगा, जितनी बार क्रॉन चलता है।

+3

मैं समझता हूं कि कैश को रीफ्रेश कैसे करें, जो मैं करता हूं जब मुझे लगता है कि इसे अमान्य कर दिया गया है। मैं वास्तव में समझ में नहीं आता कि यह कैसे जानता है कि कैश को अवैध कर दिया गया है। और संबंधित- यदि यह जानता है कि यह अमान्य है तो यह स्वचालित रूप से कैश को रीफ्रेश क्यों नहीं करता है? क्या कैश को रीफ्रेश करने का कोई खतरा है? – localfilmmaker

+0

जब भी आप परिवर्तन करते हैं, Magento घटनाओं को आग लगती है। इन घटनाओं के श्रोताओं हैं जो प्रासंगिक कैश को अमान्य करते हैं। यह क्यों करता है (और यह स्वचालित रूप से रीफ्रेश क्यों नहीं होता है) यह आखिरकार एक डिज़ाइन निर्णय है, लेकिन शायद सामग्री को चरणबद्ध करने में सक्षम होने के साथ कुछ करना है। उदाहरण के लिए, आप कई उत्पादों में परिवर्तन कर सकते हैं जो सभी एक दूसरे से संबंधित हैं, और फिर कैश को रीफ्रेश कर सकते हैं। मैंने इसे क्रॉन जॉब के साथ पार कर लिया है जो प्रत्येक बार क्रॉन सर्वर पर चलता है, और स्वचालित रूप से कैश को रीफ्रेश करने के लिए फ़ंक्शन को कॉल करता है। कोड जोड़ने के लिए मैं अपना मूल उत्तर संपादित करूंगा। –

+3

बहुत खराब समाधान: एक क्रॉन सेट करना जो सभी कैश को रीफ्रेश करता है, हर बार यह चलता है, यह कैश को अक्षम करने जैसा है ... आपको कम से कम जांचना चाहिए कि कैश को अमान्य कर दिया गया है और हर 10/30 मिनट में क्रॉन सेट करें ... – WonderLand

1

2015: एओई शेडुलर cronjob द्वारा कैश को साफ करने में सक्षम है। बदलें नौकरी

"core_clean_cache"

30 2 * * * (डेली 2:30) 59 * * * * करने से

(हर 59 मिनट)।

0

@ मैगेंटो गाय का जवाब सही है, लेकिन मुझे लगता है कि नीचे दिया गया यह समाधान Magento पर केवल अमान्य कैश को रीफ्रेश करने में आपकी सहायता कर सकता है।

मैं बिट्टनामी Magento स्टैक का उपयोग करता हूं, मेरे लिए यह समाधान नीचे दिया गया सबसे अच्छा था।

मैंने एक Mage_Shell_Class php फ़ाइल बनाने की कोशिश की है, लेकिन सफलता के बिना (अमान्य कैश सरणी हमेशा चलती है जब यह चलती है, इससे कोई फर्क नहीं पड़ता, और मैं वास्तव में कल्पना क्यों नहीं करता)।

मैं एक php फ़ाइल 'sample.php' बना लिया है:

<?php 

require 'app/Mage.php'; 

$invalid = Mage::app()->getCacheInstance()->getInvalidatedTypes(); 

foreach($invalid as $i) 
{ 
    Mage::app()->getCacheInstance()->cleanType($i["id"]); 
} 

मैं इसे Magento रूट फ़ोल्डर पर रखा गया है, और इसे शुरू करने के मैं एक cronjob कि जड़ उपयोगकर्ता के अधीन ही इस्तेमाल करते हैं।

तो, जड़ उपयोगकर्ता पर cronjob बनाने के लिए:

sudo crontab -u root -e 

और यह इसे चलाने के लिए मेरी कमांड लाइन था:

* * * * * . /opt/bitnami/scripts/setenv.sh ; /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/sample.php >> /var/log/cron/cron.log 2>&1 

इस लाइन पर कुछ भागों मेरी समस्या के लिए बहुत खास हैं :

  1. चूंकि यह केवल अमान्य कैश को रीफ्रेश करता है, मैंने इसे हर मिनट चलाने का फैसला किया है।
  2. setenv.sh एक ऐसी स्क्रिप्ट है जो मुझे इस विशेष बिट्टानी स्टैक से निपटने के दौरान पर्यावरण स्थापित करने में मदद करती है।
  3. इस स्क्रिप्ट के आउटपुट को प्राप्त करने के लिए मैंने इस अंतिम भाग का उपयोग किया है ">> /var/log/cron/cron.log 2> & 1" मैंने जो निर्देशिका बनाई है, उसे आउटपुट त्रुटियों के लिए (/ var/log/क्रॉन), और इस पर सही अनुमति दी है।

शायद आपको क्रॉन लाइन कमांड को बदलने की ज़रूरत है, लेकिन मुझे लगता है कि यह आपकी मदद करेगा।

संबंधित मुद्दे