Nouveau : Datasets open source gratuits disponibles !Decouvrir →
Intermediaire 20 min Next.js

Caching avec Next.js et Redis

Voici un tutoriel approfondi sur le caching avec Next.js et Redis :

Pourquoi Caching avec Next.js et Redis ?

Dans les environnements web modernes, le rendement et la vitesse de réponse sont des facteurs clés pour une expérience utilisateur optimale. Le caching est une technique essentielle qui permet d'augmenter ces performances en stockant temporairement les données les plus fréquemment utilisées dans un espace mémoire rapide.

Le contexte réel est que le temps de réponse peut être considérablement amélioré en évitant la nécessité de recalculer ou de récupérer des données complexes à chaque requête. Un cas d'usage concret pourrait être une application de e-commerce où les informations des produits sont régulièrement mises à jour et doivent être rapidement affichées aux utilisateurs.

Prerequis

  • Connaissance de base de JavaScript
  • Familiarité avec Next.js
  • Installation de Node.js (v14.0.0 ou plus tard)
  • Installation de Redis (https://redis.io/download)

Concepts fondamentaux

1. Caching avec Next.js

Next.js fournit une intégration native pour le caching des données via le middleware et les getStaticProps/getServerSideProps.

// pages/index.js
export async function getStaticProps() {
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();

  return {
    props: { data },
    revalidate: 10, // Réactualise les données toutes les 10 secondes
  };
}

export default function Home({ data }) {
  return <div>{data.map(item => <p key={item.id}>{item.name}</p>)}</div>;
}

2. Redis

Redis est un serveur en mémoire qui stocke des données sous forme de clés/valeurs, offrant une vitesse d'accès très élevée.

## Installation de Redis
brew install redis
redis-server

3. Intégration Next.js et Redis

Utilisons ioredis pour intégrer Redis avec Next.js.

npm install ioredis
nextjs
// lib/redis.js
const Redis = require('ioredis');
const redis = new Redis();

module.exports = redis;

Mise en pratique : projet fil rouge

1. Création du projet

npx create-next-app next-redis-cache
cd next-redis-cache
npm install ioredis

2. Configuration de Redis

Créer un fichier lib/redis.js pour configurer la connexion à Redis.

// lib/redis.js
const Redis = require('ioredis');
const redis = new Redis();

module.exports = redis;

3. Stockage et récupération des données en cache

Créer une API route pour stocker et récupérer les données en cache.

// pages/api/cache.js
import redis from '../../lib/redis';

export default async function handler(req, res) {
  if (req.method === 'GET') {
    const key = req.query.key;
    let data = await redis.get(key);

    if (!data) {
      // Récupération des données depuis une source externe
      data = await fetch('https://api.example.com/data').then(res => res.json());
      data = JSON.stringify(data);
      await redis.setex(key, 3600, data); // Stockage en cache pendant 1 heure
    }

    res.status(200).json(JSON.parse(data));
  } else {
    res.setHeader('Allow', ['GET']);
    res.status(405).end(`Method ${req.method} Not Allowed`);
  }
}

4. Utilisation des données en cache dans une page

Modifier la page d'accueil pour utiliser les données du cache.

// pages/index.js
import { useEffect, useState } from 'react';
import axios from 'axios';

export default function Home() {
  const [data, setData] = useState([]);

  useEffect(() => {
    async function fetchData() {
      try {
        const response = await axios.get('/api/cache?key=data');
        setData(response.data);
      } catch (error) {
        console.error('Error fetching data:', error);
      }
    }

    fetchData();
  }, []);

  return (
    <div>
      {data.map(item => (
        <p key={item.id}>{item.name}</p>
      ))}
    </div>
  );
}

Erreurs frequentes et debugging

1. Erreur : Redis connection refused

Code incorrect :

const redis = new Redis('redis://localhost');

Code correct :

const redis = new Redis();

2. Erreur : ERR wrong number of arguments for 'setex' command

Code incorrect :

await redis.setex(key, data);

Code correct :

await redis.setex(key, 3600, data);

3. Erreur : TypeError: Cannot read property 'map' of undefined

Code incorrect :

const response = await axios.get('/api/cache?key=data');
setData(response.data);

Code correct :

const response = await axios.get('/api/cache?key=data');
setData(response.data ? response.data : []);

Pour aller plus loin

  1. Distributed Caching : Découvrez comment utiliser Redis dans un environnement distribué avec Next.js.

  2. Redis Streams : Apprenez à utiliser les streams de Redis pour traiter des flux de données en temps réel.

  3. Redis Cluster : Explorez la configuration d'un cluster Redis pour augmenter sa disponibilité et sa performance.

Défi pratique

Implémentez un système de caching pour une application de blog où les articles sont récupérés depuis une API. Assurez-vous que les articles récents sont mis à jour en temps réel et que le cache est efficacement géré.

En suivant ce tutoriel, vous devriez être capable d'implémenter un système de caching robuste avec Next.js et Redis pour améliorer la performance de votre application.

Besoin d'aide sur Next.js ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Qu'est-ce que le caching avec Next.js et Redis ?
Le caching avec Next.js et Redis permet d'améliorer la performance de votre application en stockant les données populaires en mémoire vive. Cela réduit le temps de réponse et la charge sur le serveur.
Comment installer Redis dans un projet Next.js ?
Pour installer Redis dans un projet Next.js, vous pouvez utiliser le package 'redis' via npm ou yarn. Exécutez `npm install redis` ou `yarn add redis` pour l'installer.
Quelle est la différence entre le caching côté serveur et côté client avec Next.js ?
Le caching côté serveur avec Redis se fait sur le serveur de l'application, ce qui permet un accès plus rapide aux données partagées. Le caching côté client avec Next.js utilise les objets Cache API du navigateur pour stocker des données côté utilisateur.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.