ฉันจะล้างแคชของ Magento โดยทางโปรแกรมได้อย่างไร


23

ฉันกำลังกำหนดค่าการวางจำหน่ายโดยอัตโนมัติโดย bootstrapping Mage ในหลาย ๆ สคริปต์ ในตอนท้ายของสคริปต์ฉันต้องล้างแคชของ Magento

มีวิธีล้างแคชโดยใช้หนึ่งในMageคลาสหรือวิธีการหรือไม่


1
ลองสิ่งนี้: Mage :: app () -> cleanCache () หรือ Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

คำตอบ:


25

โปรดลองรหัสต่อไปนี้เพื่อล้างแคชโดยทางโปรแกรม

Mage::app()->cleanCache()

หรือ

Mage::app()->getCacheInstance()->flush(); 

40

หากคุณต้องการจริง ๆ คุณสามารถล้างแคชได้หนึ่งประเภทขึ้นไป นี่คือวิธีที่ส่วนผู้ดูแลระบบทำ ภายใต้Mage_Adminhtml_CacheController::massRefreshAction

คุณจะเห็นว่ามันวนรอบพารามิเตอร์ทั้งหมดtypesและเรียกต่อไปนี้

$tags = Mage::app()->getCacheInstance()->cleanType($type);
Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
$updatedTypes++;

ประเภทที่เป็นไปได้มีดังนี้:

  1. การตั้งค่า
  2. แบบ
  3. block_html
  4. แปลความ
  5. คอลเลกชัน
  6. eav
  7. config_api
  8. config_api2
  9. เต็มหน้า

และสามารถส่งคืนได้โดยโทร Mage::app()->getCacheInstance()->getTypes()


3
การทำความเข้าใจเกี่ยวกับการล้างแคชโดยทางโปรแกรมความคิดเห็นนี้มีประโยชน์มากกว่าคำตอบที่เลือก เนื่องจากเป็นสิ่งสำคัญที่จะเรียกใช้ dispatchEvent, Varnish ESI ของฉันไม่ได้ถูกล้างจนกว่าฉันจะเพิ่มการเรียก dispatchEvent (ซึ่งแน่นอนว่าจะช่วยให้โมดูลอื่น ๆ สามารถยิงรหัสได้)
Barry Carlyon

6

สคริปต์ภายนอกที่รวดเร็วเพื่อล้างแคชทั้งหมด:

<?php

require_once './app/Mage.php';
umask(0);
Mage::app('default');
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

try {
    $allTypes = Mage::app()->useCache();
    foreach($allTypes as $type => $value) {
        Mage::app()->getCacheInstance()->cleanType($type);
        Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
        echo "{$type} </br>";
    }
    echo 'done';
} catch (Exception $e) {
    echo $e->getMessage();
}

3

เราสามารถใช้n98-magerunได้ โดยเฉพาะอย่างยิ่งเนื่องจากคุณไม่ควรล้างแคชระหว่างการเรียกใช้สคริปต์การปรับใช้ ดูคำsys:setup:incrementalสั่งย่อยเพื่อดูการดำเนินการควบคุมสคริปต์การตั้งค่า Magento ได้อย่างมีประสิทธิภาพยิ่งขึ้น


คุณสามารถให้ข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับคำชี้แจงของคุณ "โดยเฉพาะอย่างยิ่งเนื่องจากคุณไม่ควรล้างแคชในระหว่างการเรียกใช้สคริปต์การปรับใช้"
STW

1
Magento มีคุณสมบัติที่จะทำการอัพเกรดโดยอัตโนมัติ สิ่งนี้จะถูกทริกเกอร์เมื่อจะต้องสร้างแคชการกำหนดค่าใหม่ ถ้าคุณไม่ต้องการคุณสมบัติและรหัสอย่างระมัดระวังคุณแนะนำกระบวนการแบบขนานที่คุณหรือเพื่อนร่วมงานของคุณอาจไม่คาดคิด
Melvyn

1

หากคุณต้องการล้างการจัดเก็บแคชทั้งหมดหมายถึงใช้รหัสต่อไปนี้

Mage::app()->getCacheInstance()->flush();

ที่นี่ฟังก์ชั่นล้างเรียกฟังก์ชั่นแคช magento เริ่มต้นหากคุณต้องการคำชี้แจงเพิ่มเติมหมายถึงการอ้างอิง URL ต่อไป

/programming/15028159/magento-flush-cache-storage

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.