Come cancellare la cache dei caratteri jolly in Drupal 8?


8

In Drupal 7, eravamo in grado di fare questo:

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

che eliminerebbe qualsiasi cestino della cache iniziato con la stringa state:(corrispondenti ID cache come state:infoe state:nebraska).

Il record delle modifiche su https://www.drupal.org/node/1272696 rileva anche questo caso d'uso nell'esempio di Drupal 7, ma in realtà non fornisce un esempio di come replicarlo in D8.

Sembra che dovremmo usare i tag cache, che sembrano una conversione più costosa considerando il semplice caso d'uso. Non vedo alcun metodo di corrispondenza che si applicherebbe in CacheBackendInterface . Nota, non si tratta di eliminare tutti gli elementi in un cestino, che è chiaramente coperto da deleteAll ().

Risposte:


8

Non sono sicuro del motivo per cui la risposta esistente è stata eliminata, era (quasi) corretta.

La cancellazione della cache con caratteri jolly è stata rimossa. È stato estremamente complicato supportare backend come redis e memcache, che non hanno il supporto jolly.

I tag della cache sono la sostituzione e non è così complicato da usare. Basta passare un elenco di stringhe come quarto argomento (un po 'fastidioso che sia necessario impostare l'argomento timestamp predefinito, un metodo separato sarebbe carino):

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

e quindi chiama:

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

Ok, ti ​​aiuterò ad aggiornare l'avviso di modifica per essere più esplicito che i tag cache devono essere usati in sostituzione.
Dave Reid,

Qual è un modo affidabile per ottenere tutte le chiavi della cache che devono essere taggate per l'eliminazione? Ad esempio, se desidero cancellare 'entity_bundle_extra_fields:node:article:' . $langcodeper tutte le lingue? Potrei ottenere un elenco di tutte le lingue, ma c'è qualcosa di più semplice? In questo caso ha già un tag cache, 'entity_field_info'. Ma forse voglio invalidare meno ampiamente.
donquixote,

No non c'è. L'API della cache non ha alcun metodo di query / elenco. E non dovresti interagire direttamente con le voci della cache di qualcun altro, utilizzare l'API, ad esempio il gestore del campo dell'entità cancella le definizioni memorizzate nella cache in questo caso. Quelle voci della cache non sono un'API, il core è libero di cambiare le chiavi / la struttura e quindi il tuo codice sarebbe rotto
Berdir
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.