Увеличьте эффективность своих запросов с помощью кэширования TypeORM: повысить производительность стало проще!

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

Метод 1: кэширование результатов запроса
TypeORM предоставляет простой способ кэширования результатов определенного запроса. Этого можно добиться, используя метод cache, предоставляемый классом Repository. Вот пример:

import { getRepository } from 'typeorm';
import { User } from '../entities/User';
const userRepository = getRepository(User);
const cachedUsers = await userRepository
  .createQueryBuilder('user')
  .where('user.age > :age', { age: 18 })
  .cache(60000) // Cache the result for 60 seconds
  .getMany();

Вызывая метод cacheс указанным значением TTL (срок жизни), TypeORM кэширует результат запроса в течение заданного периода времени. Последующие вызовы того же запроса в пределах TTL будут извлекать результат из кэша, а не обращаться к базе данных.

Метод 2: кэширование результатов запроса с помощью построителя запросов
TypeORM также позволяет кэшировать результаты запроса непосредственно через построитель запросов. Этот подход полезен, когда вам нужен больший контроль над поведением кэширования. Вот пример:

import { getConnection } from 'typeorm';
import { User } from '../entities/User';
const queryBuilder = getConnection()
  .createQueryBuilder()
  .select('user')
  .from(User, 'user')
  .where('user.age > :age', { age: 18 })
  .cache(60000) // Cache the result for 60 seconds
const cachedUsers = await queryBuilder.getMany();

Привязав метод cacheк построителю запросов, вы можете кэшировать результат на определенный период времени, как и в методе 1.

Метод 3: глобальное кэширование результатов запроса
Если вы хотите глобально кэшировать результаты запросов во всем приложении, TypeORM предоставляет способ настройки поставщика глобального кэша. Это позволяет кэшировать запросы в разных репозиториях и конструкторах запросов. Вот пример:

import { createConnection } from 'typeorm';
import { User } from '../entities/User';
await createConnection({
  // ...
  cache: {
    type: 'redis', // or 'ioredis' if you prefer
    options: {
      host: 'localhost',
      port: 6379,
      ttl: 60000, // Global TTL for query caching
    },
  },
  // ...
});
// Now you can use query caching across your application

При настройке поставщика кэша, такого как Redis или ioredis, в настройках подключения TypeORM все результаты запроса будут автоматически кэшироваться в соответствии с указанным TTL.

Реализуя кэширование запросов в проектах на основе TypeORM, вы можете значительно повысить производительность за счет снижения нагрузки на базу данных. Мы рассмотрели три метода: кэширование результатов запроса, кэширование результатов запроса с помощью построителя запросов и глобальное кэширование результатов запроса. Каждый метод имеет свои преимущества и может использоваться в зависимости от ваших конкретных требований. Так что вперед и наполните свои запросы кэшированием TypeORM!