Как кэшировать в Next JS

Вопрос или проблема

Какой лучший способ кэширования в Next.js, чтобы сократить количество запросов к базе данных:
Обычно мы выполняем запросы к API Next.js на серверных страницах.

Не ищу (кэширование маршрутов) https://nextjs.org/docs/app/building-your-application/caching

Я ищу что-то сверх тех страниц, основанное на кэшировании пользователей, например:
кто-то запрашивал, кто понравился блог, теперь я загружу эту информацию из базы данных и отправлю её пользователю. Затем, когда следующий пользователь снова запрашивает эту информацию, мне нужно повторно выполнить этот запрос.
Могу ли я кэшировать такую информацию, если да, то как это сделать, например, с использованием Redis или как-то иначе?

Любой блог или видео могут быть полезны.

Я ожидаю сократить количество запросов к базе данных для такого рода больших запросов.

Ответ или решение

Кэширование в Next.js может значительно улучшить производительность приложения, снизив количество запросов к базе данных. В данном ответе мы рассмотрим подходы к кэшированию, которые выходят за рамки обычного кэширования страниц и помогают уменьшить нагрузку на базу данных при повторных запросах.

1. Использование Redis для кэширования данных

Redis — это высокопроизводительное хранилище данных в памяти, которое идеально подходит для кэширования. Он может хранить данные в формате ключ-значение и обеспечивает быструю обработку запросов. Рассмотрим, как интегрировать Redis в ваше приложение Next.js:

Установка Redis

Первым делом необходимо установить Redis в ваш проект. Это можно сделать с помощью следующей команды:

npm install redis

Настройка подключения к Redis

Создайте файл для настройки подключения к Redis. Например, lib/redis.js:

import { createClient } from 'redis';

const client = createClient(); // подключение к локальному инстансу Redis
client.on('error', (err) => console.log('Redis Client Error', err));

(async () => {
  await client.connect();
})();

export default client;

Кэширование данных при запросах

Внутри вашего API маршрута или серверного компонента вы можете использовать Redis для кэширования результатов запросов к базе данных. Пример кода:

import redisClient from '../../lib/redis';
import db from '../../lib/database'; // предполагаем, что у вас есть модуль для работы с БД

async function fetchLikes(blogId) {
  // Попытка получить кэшированные данные
  const cacheKey = `blog:${blogId}:likes`;
  const cachedLikes = await redisClient.get(cacheKey);

  if (cachedLikes) {
    return JSON.parse(cachedLikes); // Если кэш найден, возвращаем его
  }

  // Если кэш не найден, делаем запрос к базе данных
  const likes = await db.getLikes(blogId);

  // Сохраняем результат в кэш с истечением времени, например, 1 час
  await redisClient.set(cacheKey, JSON.stringify(likes), {
    EX: 3600, // время жизни кэша в секундах
  });

  return likes;
}

2. Кэширование с использованием встроенного кэширования Next.js

Помимо Redis, вы можете воспользоваться встроенным кешированием данных Next.js, используя getServerSideProps или getStaticProps. Это полезно в случае, если вы хотите временно сохранять данные на уровне SSR:

export async function getServerSideProps(context) {
  const blogId = context.params.id;
  const likes = await fetchLikes(blogId); // вызов функции кэширования

  return {
    props: {
      likes,
    },
  };
}

3. Менеджмент кэша

Важно помнить о необходимости управления кэшем. Для этого используйте следующие стратеги:

  • Invalidate Cache: Обеспечьте механизм для сброса кэша, когда данные изменяются. Например, можно очищать кэш при обновлении записей в базе данных.
  • TTL (Time-To-Live): Устанавливайте разумные временные límites на хранение данных в кэше, чтобы избежать устаревания данных.

4. Мониторинг и оптимизация

После внедрения кэширования важно следить за производительностью вашего приложения:

  • Используйте инструменты мониторинга, чтобы отслеживать количество запросов к Redis и базе данных.
  • Проверьте, насколько кэширование сократило время отклика вашего приложения и снизило нагрузку на базу данных.

Заключение

Кэширование данных в Next.js с помощью Redis или встроенных методов может значительно снизить нагрузку на вашу базу данных и ускорить работу приложения. Этот подход обеспечит вам более плавный пользовательский опыт и упростит управление запросами к базе данных. Для получения дополнительной информации и примеров вы можете ознакомиться с документацией Redis или блогами, посвященными оптимизации Next.js.

Оцените материал
Добавить комментарий

Капча загружается...