Bagaimana cara menghapus cache wildcard di Drupal 8?


8

Di Drupal 7, kami dulu bisa melakukan ini:

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

yang akan menghapus setiap cache nampan yang dimulai dengan string state:(pencocokan ID cache seperti state:infodan state:nebraska).

Catatan perubahan di https://www.drupal.org/node/1272696 bahkan mencatat use case ini dalam contoh Drupal 7, tetapi tidak benar-benar memberikan contoh bagaimana mereplikasi di D8.

Tampaknya kita seharusnya menggunakan tag cache, yang sepertinya konversi yang lebih mahal mengingat kasus penggunaan yang sederhana. Saya tidak melihat metode pencocokan yang akan berlaku di CacheBackendInterface . Catatan, ini bukan tentang menghapus semua item dalam nampan cache, yang jelas dicakup oleh deleteAll ().

Jawaban:


8

Tidak yakin mengapa jawaban yang ada dihapus, itu (hampir) benar.

Cache wildcard dihapus telah dihapus. Sangat rumit untuk mendukung backend seperti redis dan memcache, yang tidak memiliki dukungan wildcard.

Tag cache adalah penggantinya dan tidak terlalu rumit untuk digunakan. Anda cukup memberikan daftar string sebagai argumen ke-4 (agak menjengkelkan karena Anda harus mengatur argumen cap waktu default, metode yang terpisah akan menyenangkan):

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

lalu panggil:

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

Oke, saya akan membantu memperbarui pemberitahuan perubahan agar lebih eksplisit bahwa tag cache harus digunakan sebagai pengganti.
Dave Reid

Apa cara yang dapat diandalkan untuk mendapatkan semua kunci cache yang perlu ditandai untuk dihapus? Misalnya jika saya ingin menghapus 'entity_bundle_extra_fields:node:article:' . $langcodesemua bahasa? Saya bisa mendapatkan daftar semua bahasa, tetapi apakah ada sesuatu yang lebih sederhana? Dalam hal ini sudah memiliki tag cache, 'entitas_field_info'. Tapi mungkin saya ingin membatalkan kurang luas.
donquixote

Tidak, tidak ada. API cache tidak memiliki metode kueri / daftar. Dan Anda tidak boleh berinteraksi secara langsung dengan entri cache orang lain, gunakan API, misalnya manajer bidang entitas, hapus definisi cache dalam kasus ini. Entri cache itu bukan API, inti bebas untuk mengubah kunci / struktur dan kemudian kode Anda akan rusak
Berdir
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.