web-dev-qa-db-fra.com

Supprimer les clés de cache par motif / caractère générique

Je construis une API REST avec Lumen et je veux mettre en cache certains des itinéraires avec Redis. Par exemple pour l'itinéraire/utilisateurs/123/éléments que j'utilise:

$items = Cache::remember('users:123:items', 60, function () {
  // Get data from database and return
});

Lorsqu'une modification est apportée aux éléments de l'utilisateur, j'efface le cache avec:

Cache::forget('users:123:items');

Jusqu'ici tout va bien. Cependant, je dois également vider le cache que j'ai implémenté pour les itinéraires/utilisateurs/123 et/utilisateurs/123/catégories car ceux-ci incluent également une liste d'éléments. Cela signifie que je dois également exécuter:

Cache::forget('users:123');
Cache::forget('users:123:categories');

À l'avenir, il pourrait y avoir encore plus de caches à effacer, c'est pourquoi je recherche une fonctionnalité de motif/caractère générique telle que:

Cache::forget('users:123*');

Existe-t-il un moyen de s'adapter à ce comportement dans Lumen/Laravel?

18
j3491

Vous pouvez utiliser balises de cache .

Les balises de cache vous permettent de baliser les éléments associés dans le cache, puis de vider toutes les valeurs mises en cache auxquelles une balise donnée a été affectée. Vous pouvez accéder à un cache balisé en transmettant un tableau ordonné de noms de balises. Par exemple, accédons à un cache balisé et mettons de la valeur dans le cache:

Cache::tags(['people', 'artists'])->put('John', $john, $minutes);

Vous pouvez vider tous les éléments auxquels une balise ou une liste de balises est affectée. Par exemple, cette instruction supprimerait tous les caches étiquetés avec des personnes, des auteurs ou les deux. Ainsi, Anne et John seraient supprimés du cache:

Cache::tags(['people', 'authors'])->flush();
12
Alexey Mezenin