В современном быстро меняющемся мире оптимизация производительности имеет решающее значение для любого приложения. Одна из областей, где вы можете значительно повысить производительность, — это внедрение кэширования запросов в ваших проектах на основе 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!