Thực hiện các thẻ bộ nhớ cache tùy chỉnh


13

Tôi muốn sử dụng tính năng Gắn thẻ bộ nhớ cache mới trong D8 để giúp giữ đồng bộ các nội dung liên quan thuộc các loại khác nhau (thực thể, nút, khối, v.v.). Nhưng từ khi đọc tài liệu hiện có của tính năng này, tôi không hiểu cách thêm thẻ bộ nhớ cache của riêng mình vào các mục nội dung khi tạo / cập nhật các mục đã nói.

Ví dụ: khi tạo một nút mới của một loại Store, tôi muốn thêm vị trí thẻ bộ đệm: new_york_123 và tương tự cho khối aa. Sau đó, nếu tôi thay đổi tên hiển thị của vị trí New York 123 thành SoHo, tôi có thể làm mất hiệu lực thẻ bộ nhớ cache và có tất cả các cập nhật nội dung liên quan.


1
Tất cả các thực thể đã có thẻ bộ đệm (ví dụ: nút: 123) tự động bị vô hiệu. Vì vậy, nếu bạn chỉ tạo / cập nhật và hiển thị các nút, bạn không cần phải làm gì cả, nó sẽ hoạt động.
Berdir

khi tạo / cập nhật, nó sẽ yêu cầu một truy vấn để tìm tất cả các loại nội dung liên quan (nút, khối, thực thể) và sau đó xóa chúng khỏi mỗi bảng bộ đệm. Nếu một thẻ bộ đệm tùy chỉnh duy nhất được sử dụng để xác định mối quan hệ của các mục nội dung thì chỉ cần thẻ đó sẽ bị vô hiệu hóa để xóa bộ đệm của các mục liên quan đó.
LittleCoding

Tôi không hiểu ý của bạn và cấu trúc của bạn là gì. Thẻ được thêm vào khi chúng được sử dụng. Thẻ bộ nhớ cache phải được thêm vào bất kỳ phần tử kết xuất nào như một khối nếu nó cần thay đổi nếu nút / điều đó bị thay đổi. Nếu bạn sử dụng các cơ chế tiêu chuẩn để hiển thị các thực thể, thì đó có thể là trường hợp đã xảy ra. Nếu nó không hoạt động, bạn cần chia sẻ chi tiết hơn, với mã, chính xác những gì bạn đang làm.
Berdir

Người dùng thẻ bộ đệm: {ID} có thể bị vô hiệu hóa để kích hoạt xóa bộ đệm cho tất cả nội dung liên quan đến người dùng đó. Cùng một ý tưởng, nhưng với thẻ bộ nhớ cache tùy chỉnh.
LittleCoding

Câu trả lời:


12

Dưới đây là cách sử dụng thẻ bộ đệm trong ngữ cảnh của các khối tùy chỉnh mà tôi đã thử và hoạt động nhưng tôi nghĩ nó áp dụng cho các bối cảnh khác

Sử dụng thẻ drupal mặc định

Trong mảng xây dựng, bạn có thể chỉ định cache > tags > node_listvà nội dung khối này sẽ bị vô hiệu (được làm mới) khi BẤT K N NODE nào bị thay đổi mà không phải làm gì khác

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['node_list'], //invalidate when any node updates
            //'tags' => ['node:1','term:2'], //invalidate when node 1 or term 2 updates
        ],
    );
}

Ngoài ra, bạn có thể đặt một hoặc nhiều ID nút / thuật ngữ / người dùng để vô hiệu hóa mảng trên các nút hoặc thuật ngữ cụ thể như được hiển thị trong nhận xét mã ở trên. Lưu ý: bạn có thể trộn và khớp các nút, thuật ngữ, người dùng và thẻ tùy chỉnh khi bạn thấy phù hợp.

Sử dụng thẻ của riêng bạn

nếu bạn muốn có cách xóa mảng xây dựng của riêng mình, hãy thêm thẻ duy nhất tùy chỉnh của bạn vào mảng xây dựng (bất kỳ chuỗi duy nhất nào cũng được)

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['MY_CUSTOM_UNIQUE_TAG'],
        ],
    );
}

và trong cuộc gọi logic mã tùy chỉnh invalidateTagscủa bạn với thẻ của riêng bạn

function MY_MODULE_custom_clear_cache_logic(){ 
    ...
    \Drupal\Core\Cache\Cache::invalidateTags(array('MY_CUSTOM_UNIQUE_TAG'));        

nếu bạn muốn đọc thêm về nội bộ bộ nhớ cache 8 drupal


2
Tôi nghĩ lý tưởng là bạn sử dụng cache_tags.invalidatordịch vụ hơn là tham khảo trực tiếp một lớp học.
Andy
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.