2011-12-07 26 views
17

Trong quản trị viên Magento trong Quản lý bộ nhớ cache, điều đó có nghĩa là gì khi nó hiển thị bộ nhớ cache bị vô hiệu? Làm thế nào để Magento biết một bộ nhớ cache bị vô hiệu? Đặc biệt, tôi tự hỏi về HTML Block cache. Điều kiện nào sẽ khiến bộ nhớ cache này hiển thị như bị vô hiệu?Bộ nhớ cache "không hợp lệ" có nghĩa là gì trong Magento?

Trả lời

16

Trong Magento, bất cứ khi nào bạn thực hiện thay đổi đối với sản phẩm, khối tĩnh, v.v., nó nhận ra rằng dữ liệu trong cơ sở dữ liệu không còn giống như dữ liệu trong bộ đệm. Thật không may, Magento không nhận ra dữ liệu bộ nhớ cache khác nhau, chỉ một cái gì đó khác.

Bạn sẽ cần phải đi vào hệ thống > Quản lý bộ nhớ cache và làm mới các loại bộ nhớ cache không hợp lệ.

EDIT:

Tạo một module (hoặc sử dụng một mô-đun hiện có) mà bạn có thể sử dụng để thiết lập một công việc định kỳ cho làm mới bộ nhớ cache. Tạo một tập tin: {namespace}/{} modulename /Model/Observer.php

Bên trong tập tin đó:

<?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()); 
    } 
    } 

} 

Trong của mô-đun của bạn 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> 

Bây giờ là miễn là cron được cấu hình đúng trên máy chủ của bạn, bộ nhớ cache sẽ cập nhật tự động, thường xuyên như cron chạy.

+3

Tôi hiểu cách làm mới bộ nhớ cache, mà tôi làm khi tôi thấy rằng nó đã bị vô hiệu. Tôi chỉ không thực sự hiểu làm thế nào nó biết rằng bộ nhớ cache đã bị vô hiệu. Và liên quan - tại sao nó không tự động làm mới bộ đệm nếu nó biết nó không hợp lệ? Có bất kỳ rủi ro nào để làm mới bộ nhớ cache không? – localfilmmaker

+0

Bất cứ khi nào bạn thực hiện thay đổi, Magento sẽ kích hoạt các sự kiện. Có những người nghe những sự kiện này làm mất hiệu lực bộ nhớ cache có liên quan. Đối với lý do tại sao nó làm điều này (và tại sao nó không tự động làm mới) điều này cuối cùng là một quyết định thiết kế, nhưng có lẽ có một cái gì đó để làm với việc có thể giai đoạn nội dung. Ví dụ: bạn có thể thực hiện thay đổi đối với một số sản phẩm có liên quan đến nhau và sau đó có thể làm mới bộ nhớ cache. Tôi đã khắc phục điều này với một công việc cron chạy mỗi khi cron chạy trên máy chủ, và gọi một hàm để làm mới bộ nhớ cache tự động. Tôi sẽ chỉnh sửa câu trả lời ban đầu của mình để bao gồm mã. –

+3

Giải pháp rất tồi: thiết lập một cron làm mới tất cả bộ nhớ cache, mọi lúc nó chạy, nó cũng giống như vô hiệu hóa bộ nhớ cache ... bạn nên kiểm tra xem bộ nhớ cache có bị vô hiệu hay không và đặt cron cứ sau 30 phút ... – WonderLand

1

2015: AOE Sheduler có thể xóa bộ nhớ cache bằng cronjob. Thay đổi JOB

"core_clean_cache"

từ 30 2 * * * (Daily 2:30) để 59 * * * * (Mỗi 59 phút).

0

Câu trả lời Guy @Magento là chính xác, nhưng tôi nghĩ giải pháp này bên dưới có thể giúp bạn làm mới chỉ những bộ nhớ cache bị vô hiệu hóa trên Magento.

Tôi sử dụng Bitnami Magento Stack, đối với tôi giải pháp này dưới đây là tốt nhất tôi đã tìm thấy.

Tôi đã cố gắng tạo tệp Mage_Shell_Class php, nhưng không thành công (mảng bộ nhớ cache không hợp lệ luôn trống khi chạy, không có vấn đề gì và tôi thực sự không tưởng tượng tại sao).

tôi đã tạo ra một file php 'sample.php':

<?php 

require 'app/Mage.php'; 

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

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

Tôi đã đặt nó vào thư mục gốc Magento, và để bắt đầu nó tôi sử dụng một cronjob chạy dưới tài khoản root.

Vì vậy, để tạo cronjob trên người dùng root:

sudo crontab -u root -e 

Và đây là dòng lệnh của tôi để chạy nó:

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

Một số bộ phận trên dòng này là rất cụ thể cho vấn đề của tôi :

  1. Vì nó vừa làm mới bộ đệm không hợp lệ nên tôi đã quyết định chạy mỗi phút.
  2. setenv.sh là một tập lệnh giúp tôi đặt môi trường khi xử lý ngăn xếp bitnami cụ thể này.
  3. Để lấy đầu ra của tập lệnh này, tôi đã sử dụng phần cuối ">> /var/log/cron/cron.log 2> & 1" này để xuất các lỗi vào thư mục mà tôi đã tạo (/ var/log/cron) và đã cấp quyền chính xác cho nó.

Có thể bạn cần thay đổi lệnh dòng cron, nhưng tôi nghĩ điều này sẽ giúp bạn.

Các vấn đề liên quan