Maison >développement back-end >tutoriel php >Meilleure stratégie de mise en cache Redis dans Laravel : un guide pour une mise en cache rapide et efficace

Meilleure stratégie de mise en cache Redis dans Laravel : un guide pour une mise en cache rapide et efficace

DDD
DDDoriginal
2024-11-12 09:29:02608parcourir

Best Redis Caching Strategy in Laravel: A Guide to Fast and Efficient Caching

Laravel et Redis forment une combinaison puissante pour augmenter la vitesse et les performances des applications. Redis, un magasin clé-valeur en mémoire, est parfait pour la mise en cache, en particulier lorsque vous avez besoin d'un accès rapide et fréquent aux données. Dans ce guide, nous examinerons les stratégies de mise en cache efficaces dans Laravel avec Redis. Nous expliquerons comment mettre en cache les données, gérer les délais d'expiration et vider efficacement les caches.

Pourquoi utiliser la mise en cache Redis ?
Lorsque vous mettez en cache avec Redis dans Laravel, vous enregistrez essentiellement des données temporairement pour réduire le temps passé à interroger la base de données. La mise en cache accélère la récupération des données, réduit la charge du serveur et améliore l'expérience utilisateur en accélérant le chargement des pages.

Redis est idéal pour la mise en cache car il :

  • Peut stocker et récupérer rapidement des données
  • Prend en charge diverses structures de données telles que des chaînes, des listes et des hachages
  • Propose des outils pour gérer l'expiration du cache et effacer les anciennes données

Explorons comment utiliser au mieux la mise en cache Redis dans Laravel.
Disons que nous avons un site de journaux. Nous devons maintenant créer une API pour obtenir des nouvelles.

1. Configuration de la mise en cache de base avec Laravel et Redis

Pour commencer, mettons en cache une simple réponse API, comme une liste des derniers articles d'actualité.

$data = Cache::remember('latest_news', 3600, function () {
    return News::latest()->get();
});

Dans cet exemple :
Cache::remember stocke les données avec une clé (latest_news) et une durée de vie (TTL) de 3600 secondes (1 heure).
Si une demande de last_news arrive à nouveau dans l'heure, Redis sert les données mises en cache sans interroger la base de données.

2. Structuration des clés de cache et des délais d'expiration

Pour conserver les données à jour sans surcharger Redis :
Définissez des durées de vie plus courtes pour les données fréquemment mises à jour (par exemple, 15 à 30 minutes).
Utilisez des durées de vie plus longues (par exemple, 1 à 2 heures) pour les données qui changent rarement.

Utilisez des clés de cache spécifiques et structurées qui reflètent le contenu des données. Par exemple :

$cacheKey = "news:category:category_1";

Cette clé est claire, unique et auto-descriptive, ce qui la rend facile à identifier et à gérer au sein de Redis.

3. Utilisation de balises pour la gestion du cache groupé

Redis prend en charge les balises, qui nous permettent de gérer des données regroupées sous une balise commune. Par exemple, en marquant tous les caches liés aux actualités avec news :

Cache::tags(['news', 'category'])->remember('category_news_1', 3600, function () {
    return $this->news_repository->getNewsByCategory(1);
});

Maintenant, si nous voulons vider tous les caches d'actualités spécifiques à une catégorie (lorsque les actualités sont mises à jour), nous pouvons utiliser :

Cache::tags(['news', 'category'])->flush();
  1. Mise en cache des données paginées et filtrées Lors de l'ajout d'une pagination ou de filtres (comme une catégorie ou des balises), rendez chaque clé de cache unique aux paramètres :
$page = request()->input('page', 1);
$limit = request()->input('limit', 10);
$cacheKey = "news:page_{$page}:limit_{$limit}";

$newsData = Cache::remember($cacheKey, 3600, function () use ($page, $limit) {
    return News::latest()->paginate($limit, ['*'], 'page', $page);
});

Par ici :
Une entrée de cache unique est créée pour chaque page et limite.
Les utilisateurs peuvent récupérer des pages rapidement sans réinterroger la base de données.

Pour les données filtrées, incluez les paramètres de filtre dans la clé :

$data = Cache::remember('latest_news', 3600, function () {
    return News::latest()->get();
});

Cela garantit que chaque combinaison de catégorie et de page possède sa propre entrée de cache.

5. Invalidation automatique du cache lors des modifications de données

Effacer ou « invalider » les caches garantit que les utilisateurs voient les données mises à jour lorsque cela est nécessaire. Voici comment l'automatiser :
Utilisez des observateurs de modèles pour les événements tels que la création, la mise à jour ou la suppression afin de vider les caches associés.
Exemple d'observateur pour l'actualité :

$cacheKey = "news:category:category_1";

Désormais, chaque fois que des actualités sont ajoutées ou mises à jour, tous les caches étiquetés d'actualités et de pagination sont vidés, gardant les données à jour.

6. Résumé et meilleures pratiques

Pour que la mise en cache fonctionne efficacement :
Clés uniques : structurez les clés avec des paramètres tels que la catégorie, la page et la limite.
Balises pour données groupées : utilisez des balises pour gérer facilement les caches de groupes de données spécifiques.
Automatisez l'invalidation : configurez des observateurs pour vider les caches obsolètes lors des modifications de données.
Définir une expiration raisonnable : choisissez les durées de vie en fonction de la fréquence à laquelle les données changent, généralement entre 15 minutes et 1 heure.

L'utilisation de Redis avec cette approche structurée permet aux API Laravel de répondre plus rapidement, améliore la gestion de la charge du serveur et garantit une stratégie de cache fiable, efficace et facile à gérer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn