Làm cách nào tôi có thể lập trình xóa bộ nhớ cache của Magento?


23

Tôi đang tự động hóa cấu hình phát hành bằng cách khởi động Mage trong một số tập lệnh phát hành. Khi kết thúc tập lệnh, tôi cần xóa bộ nhớ cache của Magento.

Có cách nào để xóa bộ đệm bằng một trong các Magelớp hoặc phương thức không?


1
hãy thử điều này: Mage :: app () -> cleanCache () hoặc Mage :: app () -> getCacheInstance () -> flush ();
Stefan Gregori

Câu trả lời:


25

Vui lòng thử đoạn mã sau để xóa bộ nhớ cache theo chương trình

Mage::app()->cleanCache()

hoặc là

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

40

Nếu bạn thực sự muốn, bạn cũng có thể xóa chỉ một hoặc nhiều loại bộ đệm. Đây thực sự là cách phần quản trị làm điều đó. DướiMage_Adminhtml_CacheController::massRefreshAction

Bạn có thể thấy rằng nó lặp qua tất cả các tham số typesvà gọi như sau

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

Các loại có thể như sau:

  1. cấu hình
  2. bố trí
  3. khối_html
  4. dịch
  5. bộ sưu tập
  6. ev
  7. cấu hình
  8. cấu hình_api2
  9. full_page

Và những thứ này có thể được trả lại bằng cách gọi Mage::app()->getCacheInstance()->getTypes()


3
Đã được giải quyết với việc xóa bộ nhớ cache theo chương trình, nhận xét này hữu ích hơn câu trả lời được chọn. Vì điều quan trọng là gọi công cụEvent, ESI Varnish của tôi không bị xóa cho đến khi tôi thêm cuộc gọi công văn. (Tất nhiên sẽ cho phép các mô-đun khác kích hoạt mã của họ một cách phù hợp)
Barry Carlyon

6

Một tập lệnh bên ngoài nhanh để xóa tất cả bộ đệm:

<?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

Chúng tôi có thể sử dụng n98-magerun . Đặc biệt là vì bạn không bao giờ nên xóa bộ đệm trong khi thực thi các tập lệnh triển khai. Ngoài ra, hãy nhìn vào sys:setup:incrementaltiểu ban để thực thi các kịch bản thiết lập Magento được kiểm soát nhiều hơn.


Bạn có thể cung cấp một số thông tin chi tiết bổ sung cho tuyên bố của mình "Đặc biệt vì bạn không bao giờ nên xóa bộ đệm trong khi thực thi các tập lệnh triển khai"?
STW

1
Magento có một tính năng tự động chạy nâng cấp. Điều này được kích hoạt, khi bộ đệm cấu hình phải được xây dựng lại. Trừ khi bạn đặc biệt cần tính năng đó và mã hóa cẩn thận cho nó, bạn sẽ giới thiệu một quy trình song song mà bạn hoặc đồng nghiệp của bạn có thể không lường trước được.
Melvyn

1

Nếu bạn thực sự cần phải xóa tất cả các kho lưu trữ bộ đệm có nghĩa là sử dụng mã sau đây,

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

Ở đây chức năng Flush gọi chức năng bộ đệm magento mặc định, Nếu bạn cần làm rõ hơn có nghĩa là tham khảo url sau.

/programming/15028159/magento-flush-cache-st Storage

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.