Làm thế nào để xóa bộ nhớ cache ký tự đại diện trong Drupal 8?


8

Trong Drupal 7, chúng tôi đã từng có thể làm điều này:

cache_clear_all('state:', 'cache', TRUE)

sẽ xóa bất kỳ yêu cầu bin bộ nhớ cache nào bắt đầu bằng chuỗi state:(ID bộ đệm phù hợp như state:infostate:nebraska).

Bản ghi thay đổi tại https://www.drupal.org/node/1272696 thậm chí lưu ý trường hợp sử dụng này trong ví dụ Drupal 7, nhưng thực tế không cung cấp ví dụ về cách sao chép nó trong D8.

Có vẻ như chúng tôi phải sử dụng thẻ bộ nhớ cache, có vẻ như là một chuyển đổi đắt tiền hơn khi xem xét trường hợp sử dụng đơn giản. Tôi không thấy bất kỳ phương thức phù hợp nào sẽ áp dụng trong CacheBackendInterface . Lưu ý, đây không phải là về việc xóa tất cả các mục trong thùng bộ đệm, được bao phủ rõ ràng bởi xóa ALL ().

Câu trả lời:


8

Không chắc chắn tại sao câu trả lời hiện tại đã bị xóa, nó (gần như) chính xác.

Xóa bộ nhớ cache Wildcard đã bị xóa. Nó cực kỳ phức tạp để hỗ trợ trong các phụ trợ như redis và memcache, không có hỗ trợ ký tự đại diện.

Thẻ bộ nhớ cache là sự thay thế và nó không quá phức tạp để sử dụng. Bạn chỉ cần chuyển qua một danh sách các chuỗi làm đối số thứ 4 (hơi khó chịu khi bạn phải đặt đối số dấu thời gian mặc định, một phương thức riêng sẽ rất hay):

\Drupal::cache('default')->set('state:info', $your_data, Cache::PERMANENT, 
['state']);

và sau đó gọi:

\Drupal\Core\Cache\Cache::invalidateTags(array('state'));

Ok, tôi sẽ giúp cập nhật thông báo thay đổi để rõ ràng hơn rằng các thẻ bộ đệm phải được sử dụng để thay thế.
Dave Reid

Một cách đáng tin cậy để có được tất cả các khóa bộ nhớ cache cần được gắn thẻ để xóa là gì? Ví dụ, nếu tôi muốn xóa 'entity_bundle_extra_fields:node:article:' . $langcodetất cả các ngôn ngữ? Tôi có thể nhận được một danh sách tất cả các ngôn ngữ, nhưng có gì đơn giản hơn không? Trong trường hợp này, nó đã có thẻ bộ nhớ cache, 'entity_field_info'. Nhưng có lẽ tôi muốn vô hiệu hóa ít rộng hơn.
donquixote

Không có. API bộ đệm không có phương thức truy vấn / danh sách. Và bạn không nên tương tác trực tiếp với các mục lưu trữ của người khác, hãy sử dụng API, ví dụ: trình quản lý trường thực thể xóa các định nghĩa được lưu trong bộ nhớ cache trong trường hợp này. Các mục bộ đệm đó không phải là API, lõi có thể tự do thay đổi các khóa / cấu trúc và sau đó mã của bạn sẽ bị hỏng
Berdir
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.